在正则表达式中没有条件

时间:2012-11-30 00:49:30

标签: regex

我正在使用gsm调制解调器,我想解析命令响应。我想用正则表达式来实现它。所以我有以下文字:

1.AT+CMGF=0
2.
3.OK
4.AT+CMGF=1
5.
6.OK
7.AT+ji
8.
9.ERROR
10.AT+CPMS="ME","ME","ME"
11.
12.+CPMS: 50,100,50,100,50,100
13.
14.OK
15.AT+CMGL="ALL"
16.
17.+CMGL: 0,"REC READ","+7914xxxxxxx",,"12/11/27,12:27:00+44"
18.04DEC0777E03001281 1892
19.+CMGL: 1,"REC READ","+7924xxxxxxx",,"12/11/27,12:33:51+44"
20.04DEC0742E00200176 646411 17983
21.+CMGL: 6,"REC READ","+7924xxxxxxx",,"12/11/27,13:28:00+44"
22.ERROR 
23.+CMGL: 7,"REC READ","+79098088xxx",,"12/11/27,12:40:16+44"
24.OK
25.
26.+CMGL: 49,"REC READ","+7924xxxxxxx",,"12/11/27,14:01:01+44"
27.010104480150014300 127051 0020640
28.
29.OK

我需要在每次操作后捕获ERROROK,并将其从邮件中排除,以防有人发送邮件。我接下来试过了:

(\r\n)(OK|ERROR)|^("\r\n(OK|ERROR))

但它不起作用。换句话说,我需要排除第22行,第24行并获取其余的OKERROR行。 请帮忙。

1 个答案:

答案 0 :(得分:0)

您的问题有点难以理解。如果您只需要从字符串中删除OK和ERROR消息,则应该使用简单的String.Replace()函数。但是如果你想获取换行符并返回字符,你可以使用以下正则表达式并用空字符串替换。

\r\n(?:OK|ERROR)

但这将取代所有OK和ERROR消息,而不仅仅是第22和24行的消息。

我假设行号仅用于演示目的,而不是您尝试清理的实际字符串的一部分。如果它们是字符串的一部分,则正则表达式必须是这样的:

\r\n\d+\.(?:OK|ERROR)