如何跨越换行符正则表达式



我正试图通过三行捕获下面的3个数字

xxxxxxxx
xxxxxxxx
Matches 
1 - 60
out of 92
xxxxxxxx
xxxxxxxx

我就是无法使正则表达式字符串正常工作。到目前为止,我有以下内容:-

Matches.*?n.*[0-9]*.*?-.*?[0-9]*nout of.*?[0-9]*

我已经在一些在线regex测试程序和c#中尝试过了。

新信息

我发现实际的问题是因为输入文本包含一个CR(没有LF)来指示新行,所以显然的匹配不起作用。所以现在为了匹配我正在使用的新行[\r|\r\n]。

[0-9]*转换为[0-9]+,并在其周围添加括号以捕获它。

Matches.*?n.*([0-9]+).*?-.*?([0-9]+)nout of.*?([0-9]+)

演示

  • CCD_ 3重复先前的令牌零次或更多次
  • CCD_ 4重复先前的令牌一次或多次

如果在[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]*(零位或更多位),它不会捕获最后一位数字,因此还需要匹配以下字符才能捕获最后一个数字。

演示

试试这个:

(?m)Matches[sS]*?nout of[ ]*[0-9]+
.*?Matches|(d+)s*-s*(d+).*?outs*ofs*(d+)

你可以试试这个。不要忘记放置标志sg。请参阅演示。

http://regex101.com/r/lS5tT3/76

最新更新