我的正则表达式以量词*结尾。 但我在一个字符串中有很少的匹配。我怎么能这样才能找到所有的比赛?我的正则表达式:
((CMD1|CMD2)+(?::|;)+.*)
测试字符串为"cmd1: test. test. test cmd2: test2. test2. test2"
所以我需要得到匹配:
cmd1: test. test. test
cmd2: test2. test2. test2
命令可以是随机词,如" Look"," Take"," Go"。在一个字符串中可能会出现任何命令。 例如:
Go: some sentences. and more. Take: other more sentences, and even more text here. Look: more and more. and more.
答案 0 :(得分:1)
string s = "Go: some sentences. and more. Take: other more sentences, and even more text here. Look: more and more. and more.";
var matches = Regex.Matches(s, @"(?i)(go|take|look):.+?(?=\s+\w+:)");
您可以删除\s+
,但在这种情况下,您应该在结果字符串上调用Trim
。
答案 1 :(得分:1)
编写正则表达式时的一般规则是,当您想要查找模式的所有匹配项并将每个模式放入其自己的匹配项时,您可以为该模式编写正则表达式,而不是模式量化*
次。否则,您将最终将整个字符串放入一个匹配中。
我为你编辑了正则表达式:
CMD(?:1|2)(?::|;).*?(?=$|CMD)
开头几乎是不言自明的。最后,我将.
与懒惰的量词*?
进行了匹配。一旦字符串与前瞻匹配后,这将立即停止匹配。前瞻只是匹配另一个CMD
或字符串的结尾。
请记住打开不区分大小写的选项!
答案 2 :(得分:1)
你可以使用积极的前瞻:
\w+
:
.*
?
\w+
一次或多次后跟冒号:
或|
结尾(?= \w+:|$)