2012-11-30 25 views
0

我正在使用GSM調制解調器,我想解析命令響應。我想用正則表達式來實現它。所以,我有如下文字:NOT條件在正則表達式

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行。 請幫忙。

+0

應該有一個字符串比較或類似的東西在你的語言?如果你逐行閱讀,你應該能夠過濾這些消息? – nhahtdh

+0

鑑於上面的文字,您的預期輸出是什麼? – Steve

+0

我必須馬上讀全文! – Nolesh

回答

0

你的問題有點難以理解。如果您只需要從字符串中刪除OK和ERROR消息,則應該執行一個簡單的String.Replace()函數。但是,如果您想抓住換行符並返回字符,則可以使用以下正則表達式並用空字符串替換。

\r\n(?:OK|ERROR) 

但是,這將取代一切OK和錯誤信息,而不僅僅是線22的那些和24

我假設的行號有隻爲演示的目的,而不是部分您嘗試清理的實際字符串。如果他們是字符串的一部分,正則表達式將需要是這樣的:

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