如何在换行符中使用正则表达式

时间:2014-09-28 07:45:36

标签: regex line-breaks

我试图捕捉三行以下的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]。

3 个答案:

答案 0 :(得分:3)

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

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

DEMO

  • *重复前一个标记零次或多次。
  • +重复前一个令牌一次或多次。

如果您在*之后使用[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]*(零个或多个数字),它不会捕获最后一个数字,因此您还需要匹配以下字符以捕获该数字最后一个号码。

DEMO

答案 1 :(得分:1)

试试这个:

(?m)Matches[\s\S]*?\nout of[ ]*[0-9]+

答案 2 :(得分:1)

.*?Matches|(\d+)\s*-\s*(\d+).*?out\s*of\s*(\d+)

你可以尝试这个。别忘了放置标志sg。见演示。

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