You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用多行修饰符的正则表达式匹配失败求助

解决C#正则匹配AT指令响应的问题

问题分析

匹配失败主要是这几个原因:

  • 正则未包含OK后的两个空格,原代码里的"OK\r\n"直接跳过了这部分关键内容
  • 换行符格式不匹配:实际返回的字符串可能用Unix风格的\n,而非你写的Windows风格\r\n
  • 多余的RegexOptions.Multiline:这个选项是用来改变^和$的匹配范围的,你的正则里没用到锚点,加了也不起作用

修正方案

方案1:精确匹配(对应你描述的OK后两个空格+两次换行)

在OK后补上两个空格,同时用\r?\n兼容Windows/Unix两种换行格式:

string pattern = @"AT\+CMGL=""REC UNREAD""\r?\nOK  \r?\n\r?\n";
Match match = Regex.Match(content, pattern);
if (match.Success)
    return;

方案2:灵活匹配(兼容空白数量波动)

如果返回内容里的空格、换行数量可能有变化,用\s匹配任意空白字符:

// 匹配AT指令行 + 任意空白 + OK + 任意空白 + 任意空白
string pattern = @"AT\+CMGL=""REC UNREAD""\s+OK\s+\s+";
Match match = Regex.Match(content, pattern);

辅助排查步骤

如果还是匹配失败,先确认目标字符串的真实内容:

// 打印转义后的字符串,直观查看实际的换行、空格等字符
Console.WriteLine(Regex.Escape(content));

这样能明确content里到底是\r\n还是\n,以及OK后面的空格数量是否符合预期。

内容的提问来源于stack exchange,提问作者user3856437

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:40:20