我试图基于正则表达式提取字符串,但是当字符串中存在新行时。正则表达式不处理
正则表达式-
^Test\s[0-9]-[0-9]:.+?(?=\.)表达式很简单,它匹配以Test开头的任何字符串,后面跟着空格和数字数字,和:后面跟着任何文本直到。
这会发现如下所示的文本消息
Test 1-8: This is first test.
Test 9-8: This is second test and is OK.
Test 5-1:This is Test 1,3 three.但是,当下面有一个带有行间隔的文本时,上面的正则表达式不起作用。
Test 9-8: This is second test
and is OK.我应该如何在正则表达式中处理这个问题?
发布于 2017-04-26 18:56:54
. (在.+?(?=\.)中使用)与非POSIX引擎中的断线字符不匹配(精确的字符在regex库中有所不同)。
在这里使用一个否定的字符类[^.]+:
^Test\s[0-9]-[0-9]:[^.]+[^.]+匹配除文字点以外的任何一个或多个字符(包括换行符)。
发布于 2017-04-26 19:03:00
要匹配“任意字符,包括换行符”,可以使用以下方法:[\s\S],意思是“任意空白字符和任何非空白字符”.非常有效:一切。
或者,您可以使用“s”标志:/^Test\s[0-9]-[0-9]:.+?(?=\.)/s。这还将包括圆点的换行符。
不过,@wiktor-stribiżew提供的解决方案更有效,因此我建议使用该解决方案。
https://stackoverflow.com/questions/43642378
复制相似问题