【问题标题】: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

非常感谢您的帮助。

【问题讨论】:

    标签: c# regex


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多