我正在尝试基于正则表达式提取字符串,但是当字符串中存在新行时...正则表达式无法处理
正则表达式 -
^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.
我应该如何在正则表达式中处理这个问题?
答案 0 :(得分:1)
.
(在.+?(?=\.)
中使用)与非POSIX正则表达式引擎中的换行符不匹配(精确的字符在正则表达式库中不同)。
在此处使用否定字符类[^.]+
:
^Test\s[0-9]-[0-9]:[^.]+
请参阅regex demo
[^.]+
匹配除文字点以外的任何1个或多个字符(包括换行符)。
答案 1 :(得分:1)
要匹配“任何字符,包括换行符”,您可以使用以下内容:[\s\S]
,表示“任何空白字符和任何非空格字符”......如此有效:一切。
或者你可以使用's'标志:/^Test\s[0-9]-[0-9]:.+?(?=\.)/s
。这还将包括点的换行符。
@ wiktor-stribiżew提供的解决方案效率更高,所以我建议使用那个。