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
相关产品推荐
相关产品推荐

