我有回复:
MS1:111980613994 124 MS2:222980613994124
我有以下正则表达式:
MS\d:(\d(?:\r?\n?)){15}
根据Regex的说法,“(?:\r?\n?)
”部分应该让它与该组匹配,但将其从捕获中排除(因此我从该组中获得一个连续的值)。
问题在于“MS1:xxx
”与[CR][LF]
匹配并将其包含在组中。它应该从捕获中排除......
请帮助。
答案 0 :(得分:5)
(?:...)
语法并不意味着封闭的模式将从包含(?:...)
的捕获组中排除。这意味着由(?:...)
组成的组不会创建新的捕获组。换句话说,如果它们被一个包含捕获组的捕获组包围,那么将捕获非捕获组匹配的字符。
如果你真的想忽略嵌入式\r
和\n
,你最好的办法是在第二步中删除它们。你没有说你正在使用什么语言,但是相当于这个(Python)的东西应该有效:
s = re.sub(r'[\r\n]', '', s)
答案 1 :(得分:1)
据我所知,你必须使用2个正则表达式。一个是“MS \ d :( \ d(?:\ r?\ n?)){15}”,另一个用于从匹配中删除换行符。
答案 2 :(得分:0)
这里你的意思可能是将[CR] [LF]匹配部分放在捕获的组之外,例如:MS\d:(\d){15}(?:\r?\n?)
答案 3 :(得分:-1)
MS\d:(?:(\d)\r?\n?){15}