我试图捕捉三行以下的3个数字
xxxxxxxx
xxxxxxxx
Matches
1 - 60
out of 92
xxxxxxxx
xxxxxxxx
我无法让我的正则表达式字符串起作用。到目前为止我有以下内容: -
Matches.*?\n.*[0-9]*.*?-.*?[0-9]*\nout of.*?[0-9]*
我在一些在线正则表达式测试器和c#中尝试过。
新信息
我发现实际问题是因为输入文本包含一个CR(无LF)来表示新行,所以显然\ n的匹配不起作用。所以现在匹配我使用的新行[\ r | \ r \ n]。
答案 0 :(得分:3)
将[0-9]*
转为[0-9]+
并在其周围添加括号以捕获它。
Matches.*?\n.*([0-9]+).*?-.*?([0-9]+)\nout of.*?([0-9]+)
*
重复前一个标记零次或多次。+
重复前一个令牌一次或多次。 或强>
如果您在*
之后使用[0-9]
,则需要将之前的模式.*
更改为.*?
,因为*
默认为贪婪。您需要在?
之后添加*
,使其成为非贪婪的。这样它就不会吃掉以下零个或多个数字。
Matches.*?\n.*?([0-9]*).*?-.*?([0-9]*)\nout of.*?([0-9]*)\n
如果您使用此Matches.*?\n.*?([0-9]*).*?-.*?([0-9]*)\nout of.*?([0-9]*)
正则表达式,由于[0-9]*
(零个或多个数字),它不会捕获最后一个数字,因此您还需要匹配以下字符以捕获该数字最后一个号码。
答案 1 :(得分:1)
试试这个:
(?m)Matches[\s\S]*?\nout of[ ]*[0-9]+
答案 2 :(得分:1)
.*?Matches|(\d+)\s*-\s*(\d+).*?out\s*of\s*(\d+)
你可以尝试这个。别忘了放置标志s
和g
。见演示。