正则表达式与新行之间的内容不匹配 (\r\n)
Posted
技术标签:
【中文标题】正则表达式与新行之间的内容不匹配 (\\r\\n)【英文标题】:Regex not matching the content between the new lines (\r\n)正则表达式与新行之间的内容不匹配 (\r\n) 【发布时间】:2021-09-24 11:07:42 【问题描述】:我是第一次使用正则表达式,如果这是一个基本问题,我很抱歉..
我正在尝试将此输入字符串与正则表达式匹配:
string input = "\r\n+CMGL: 3,\"REC UNREAD\",\"+999999999\",,\"21/07/15,14:06:38+08\",145,10\r\nTest1\nTest2\r\n\r\nOK\r\n";
Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",,""(.+),(.+)""\r\n(.+)\r\n");
将输入的第一部分与此代码匹配没有问题:
Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",,""(.+),(.+)");
但我找不到匹配最后一部分的方法:\r\nTest1\nTest2\r\n
非常感谢您的帮助。
【问题讨论】:
【参考方案1】:您当前的问题是您忘记使用双引号行上的,145,10
文本,您试图在最后一个"
之后立即匹配换行符。
您可以使用.*
使用它们并添加另一个(.*)
以匹配Test2
行:
Regex r = new Regex(@"\+CMGL: (\d+),""([^""]+)"",""([^""]+)"",,""([^"",]+),([^""]+)"".*\r\n(.+)\r\n(.*)\r\n");
请参阅regex demo。查看表格标签:
【讨论】:
谢谢!我只需要稍微更改您的解决方案.. 以匹配 Test1 和 Test2 之间的拆分与 \n 而不是 \r\n。否则它在 C# 中不起作用。 @RegexHelp 在线正则表达式测试器总是标准化行尾。在 regexstorm,它是 CRLF,而在 regex101,它总是 LF。我建议\r?\n
,但.
也匹配CR 字符。在这种情况下,您还需要将.
替换为[^\r\n]
。所以,如果你知道Test1
和Test2
之间只有一个LF,那么就使用\n
。以上是关于正则表达式与新行之间的内容不匹配 (\r\n)的主要内容,如果未能解决你的问题,请参考以下文章