我在用 C# 构建正则表达式时遇到了一些麻烦。
比如我有一堆字符串:
1: TestString.WrittenEspecially.ForStackOverflowStringTest
2: TestString.WrittenEspecially.ForStackOverflowString
3: TestString.WrittenEspecially.StringForStackOverflowStringTest
4: TestString.WrittenStringEspecially.ForStackOverflowStringTest
我想在以“1:”或“3:”开头的行中找到所有出现的单词“String”。
我有一个正则表达式:^(1:|3:).*(?<str>String)+.*
但它只找到命名组的最后一次出现。
有什么想法吗?
最佳答案
如果您需要使用正则表达式,使用 .NET 正则表达式支持的可变宽度后视非常容易:
(?m)(?<=^[13]:.*?)String
参见 regex demo
详细信息:
-
(?m)
- 启用多行模式以便^
可以匹配行的开头而不是字符串 -
(?<=^[13]:.*?)
- 正向后视需要紧靠当前位置左侧的以下模式:-
^
- 行首 -
[13]:
-1
或3
然后:
-
.*?
- 除换行符外的任何 0+ 个字符,尽可能少
-
-
String
- 文字字符序列。
关于c# - 在以另一个开头的字符串中查找所有命名组的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41564372/