正则表达式与新行之间的内容不匹配 (\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]。所以,如果你知道Test1Test2 之间只有一个LF,那么就使用\n

以上是关于正则表达式与新行之间的内容不匹配 (\r\n)的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式,匹配除 \r \n 之外的所有内容作为普通字符

两个字符串之间的正则表达式匹配,包括那些字符串

正则表达式匹配超过 2 个空格但不匹配新行

C正则表达式,匹配两个字符串之间的内容

正则表达式:匹配模式后跟一个空格但不匹配2个或更多空格或EOF

正则表达式学习笔记