查找以另一个开头的字符串中的所有命名组出现

时间:2017-01-10 08:31:26

标签: c# regex

我在c#中构建正则表达式时遇到了一些麻烦。

例如,我有一堆字符串:

1: TestString.WrittenEspecially.ForStackOverflowStringTest
2: TestString.WrittenEspecially.ForStackOverflowString
3: TestString.WrittenEspecially.StringForStackOverflowStringTest
4: TestString.WrittenStringEspecially.ForStackOverflowStringTest

我想在以“1:”或“3:”开头的行中找到所有出现的单词“String”。

我有一个正则表达式:^(1:|3:).*(?<str>String)+.*

但它只找到最后一次出现的命名组。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

如果你需要使用正则表达式,那么.NET regex支持可变宽度的lookbehind非常容易:

(?m)(?<=^[13]:.*?)String

请参阅regex demo

<强>详情:

  • (?m) - 启用多行模式,以便^可以匹配行的开头而不是字符串
  • (?<=^[13]:.*?) - 在当前位置左侧需要以下模式的正向后视:
    • ^ - 开始行
    • [13]: - 13然后:
    • .*? - 除了换行符之外的任何0 +字符,尽可能少
  • String - 字面字符序列。