正则表达式从组中排除字符

时间:2009-07-30 20:42:10

标签: regex

我有回复:

MS1:111980613994
124 MS2:222980613994124

我有以下正则表达式:

MS\d:(\d(?:\r?\n?)){15}

根据Regex的说法,“(?:\r?\n?)”部分应该让它与该组匹配,但将其从捕获中排除(因此我从该组中获得一个连续的值)。

问题在于“MS1:xxx”与[CR][LF]匹配并将其包含在组中。它应该从捕获中排除......

请帮助。

4 个答案:

答案 0 :(得分:5)

(?:...)语法并不意味着封闭的模式将从包含(?:...)的捕获组中排除。这意味着由(?:...)组成的组不会创建新的捕获组。换句话说,如果它们被一个包含捕获组的捕获组包围,那么捕获非捕获组匹配的字符。

如果你真的想忽略嵌入式\r\n,你最好的办法是在第二步中删除它们。你没有说你正在使用什么语言,但是相当于这个(Python)的东西应该有效:

s = re.sub(r'[\r\n]', '', s)

答案 1 :(得分:1)

据我所知,你必须使用2个正则表达式。一个是“MS \ d :( \ d(?:\ r?\ n?)){15}”,另一个用于从匹配中删除换行符。

请参阅“Regular expression to skip character in capture group”。

答案 2 :(得分:0)

这里你的意思可能是将[CR] [LF]匹配部分放在捕获的组之外,例如:MS\d:(\d){15}(?:\r?\n?)

答案 3 :(得分:-1)

MS\d:(?:(\d)\r?\n?){15}

怎么样?