我在c#中构建正则表达式时遇到了一些麻烦。
例如,我有一堆字符串:
1: TestString.WrittenEspecially.ForStackOverflowStringTest
2: TestString.WrittenEspecially.ForStackOverflowString
3: TestString.WrittenEspecially.StringForStackOverflowStringTest
4: TestString.WrittenStringEspecially.ForStackOverflowStringTest
我想在以“1:”或“3:”开头的行中找到所有出现的单词“String”。
我有一个正则表达式:^(1:|3:).*(?<str>String)+.*
但它只找到最后一次出现的命名组。
有什么想法吗?
答案 0 :(得分:6)
如果你需要使用正则表达式,那么.NET regex支持可变宽度的lookbehind非常容易:
(?m)(?<=^[13]:.*?)String
请参阅regex demo
<强>详情:
(?m)
- 启用多行模式,以便^
可以匹配行的开头而不是字符串(?<=^[13]:.*?)
- 在当前位置左侧需要以下模式的正向后视:
^
- 开始行[13]:
- 1
或3
然后:
.*?
- 除了换行符之外的任何0 +字符,尽可能少String
- 字面字符序列。