C# 带正则表达式的Linq select

C# 带正则表达式的Linq select,c#,regex,linq,C#,Regex,Linq,我想从列表中提取像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(); var inputLi

我想从列表中提取像
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();
var inputList=new List(){“bbb aaa.a1 bbb”,“ccc aaa.a2 ccc”};
var result=inputList.Where(x=>x.Contains(@“aaa”)。选择(x=>x???).ToList();
您可以使用

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);

Regex.Match(i,@“\baaa\.\S+”)?.Value
部分尝试在每个项中匹配以下模式:

  • \b
    -单词边界
  • aaa\.
    -一个
    aaa.
    子字符串
  • \S+
    -1+非空白字符

.Where(x=>!string.IsNullOrEmpty(x))
将丢弃由没有匹配字符串的项生成的空项。

您可以尝试稍微不同的解决方案:

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)

长度是固定的吗?或者它后面总有一个空格吗?不,它是可变的。但总有一个空格。从您的示例来看,前后似乎总有一个空格,所以为什么不使用string.split(“”)并检查是否有任何子字符串包含“aaa”。出于进一步提取原因,我需要正则表达式。如果您对我的解决方案有任何疑问,请告诉我。我认为您不能依赖
。其中(x=>x.Contains(@“aaa”)
,因为这会在任何上下文中检查
aaa。
而在这里检查单词边界是有意义的。我也喜欢您的解决方案:D
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)