正则表达式无法匹配\r\n换行符之间的内容该如何解决
问题原因
默认状态下正则表达式的.元字符无法匹配换行符(\r、\n),你需要匹配的短信内容是跨多行的,所以原来的写法无法匹配到Test1\nTest2这段内容。
解决方案
开启正则的单行模式(Singleline),该模式下.可以匹配包括换行符在内的所有字符,同时调整正则规则匹配到完整的短信内容段,修改后的代码如下:
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"; // 指定RegexOptions.Singleline开启单行模式 Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",,""(.+),(.+)""[^\r\n]*\r\n(.+?)\r\n\r\nOK", RegexOptions.Singleline); if (r.IsMatch(input)) { Match result = r.Match(input); // 第6个捕获组对应短信内容:Test1\nTest2 string content = result.Groups[6].Value; }
规则说明
- 新增的
[^\r\n]*匹配+CMGL行末尾你之前未匹配的,145,10内容,直到行尾 - 非贪婪匹配符
.+?会在单行模式下匹配所有内容,直到遇到后续的\r\n\r\nOK标识停止,避免匹配过多内容 - 各捕获组对应内容依次为:短信序号、接收状态、发送号码、接收日期、接收时间、短信正文
内容的提问来源于stack exchange,提问作者RegexHelp
相关产品推荐
相关产品推荐

