Linq выберите с помощью регулярных выражений - PullRequest
2 голосов
/ 07 июня 2019

Я хочу извлечь строки из aaa.a1 и aaa.a2 из моего списка. Все эти строки содержат "aaa.".

Как я могу объединить Regex с Linq?

var inputList = new List<string>() { "bbb aaa.a1 bbb", "ccc aaa.a2 ccc" };

var result = inputList.Where(x => x.Contains(@"aaa.")).Select(x => x ???? ).ToList();

Ответы [ 2 ]

3 голосов
/ 07 июня 2019

Вы можете использовать

var inputList = new List<string>() { "bbb aaa.a1 bbb", "ccc aaa.a2 ccc" };
var result = inputList
    .Select(i => Regex.Match(i, @"\baaa\.\S+")?.Value)
    .Where(x => !string.IsNullOrEmpty(x))
    .ToList();
foreach (var s in result)
    Console.WriteLine(s);

Вывод:

aaa.a1
aaa.a2

См. C # demo

Партия Regex.Match(i, @"\baaa\.\S+")?.Value пытается соответствоватьследующий шаблон в каждом элементе:

  • \b - граница слова
  • aaa\. - подстрока aaa.
  • \S+ - 1+ nonсимволы пробела.

* .Where(x => !string.IsNullOrEmpty(x)) отбрасывает пустые элементы, которые получаются из элементов без соответствующих строк.

2 голосов
/ 07 июня 2019

Вы можете попробовать небольшое другое решение:

var result = inputList
  .Where(i => Regex.Match(i, @"\baaa\.[a-z0-9]+")?.Success)
  // or even
  // .Where(i => Regex.Match(i, @"\ba+\.[a-z0-9]+")?.Success)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...