как извлечь ключи из приведенной ниже строки с помощью c#

#c# #string

#c# #строка

Вопрос:

Входной запрос

  select * from mytable where projectname = __$ProjectName$__ and  projectid = __$ProjectId$__ and env = __$EnvType$__
  

Я хочу, чтобы список строк ( List<string> ) выводился ниже.(двойное подчеркивание доллар «строка» доллар двойное подчеркивание)
Язык: C#

  __ $ProjectName$__
 __ $ProjectId$__
 __ $EnvType$__
  

Комментарии:

1. Вы можете использовать регулярное выражение, что-то вроде (__$[^$] $__) и получить все совпадения с классом Regex

2. Используйте соединение строк «amp;__amp;», затем добавьте в начало » $» и в конец «amp; «.

Ответ №1:

Используя Linq:

 List<string> output = input.Split(' ').Where(x => x.StartsWith("__$") amp;amp; x.EndsWith("$__")).ToList();
  

Комментарии:

1. Будьте осторожны с разделением по пробелу: если запрос ...where projectname=__$ProjectName$__ and ... (пожалуйста, обратите внимание на отсутствие пробела после = ), __$ProjectName$__ ключ не будет извлечен

Ответ №2:

Попробуйте регулярные выражения; если ключ

  1. Начинается с __$
  2. идентификатор содержит (который начинается с буквы A..Z , a..z может содержать буквы или и цифры A..Z , a..z , 0..9 )
  3. Заканчивается на $__

соответствующий шаблон __$[A-Za-z] [A-Za-z0-9]*$__

Код:

 using System.Text.RegularExpressions;

...

string source = 
  "select * from mytable where projectname = __$ProjectName$__ and  projectid = __$ProjectId$__ and env = __$EnvType$__";

List<string> keys = Regex
  .Matches(source, @"__$[A-Za-z] [A-Za-z0-9]*$__")
  .OfType<Match>()
  .Select(match => match.Value)
  .ToList();

Console.Write(string.Join(Environment.NewLine, keys));
  

Результат:

 __$ProjectName$__
__$ProjectId$__
__$EnvType$__
  

Ответ №3:

 using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var expression = @"select * from mytable where projectname = __$ProjectName$__ and  projectid = __$ProjectId$__ and env = __$EnvType$__";

            var output = new Regex(@"__$[^s] ?$__")
                .Matches(expression)
                .Cast<Match>()
                .Select(m => m.Value)
                .ToList();

            output.ForEach(Console.WriteLine);
        }
    }
}
  

Комментарии:

1. Ваше регулярное выражение может соответствовать пустым строкам и незаполненным строкам