2017-03-23 42 views
1

我有一個使用套接字連接與另一個應用程序(調試器連接到嵌入式目標的確切對象)進行通信的Python腳本。搜索包含回車符和換行符的子串

調試器的響應可能會有所不同,但可以跨越多行,但始終以True\r\nFalse\r\n結束。我想要捕捉TrueFalse,包括換行符。

我正在使用的正則表達式(例如,r'^[.]+|[\r]+|[\n]+(True\r\n)$'爲True)在regex101.com上測試時似乎可行,但在Python中運行時僅返回\r

示例代碼與樣本響應字符串:

import re 
sample_response = 'var0 = 0x00000001\r\nTrue\r\n' 
re_true = re.compile(r'^[.]+|[\r]+|[\n]+(True\r\n)$') 
print re_true.search(sample_response).group(0) # Will print out '\r' 

我知道有一些根本性的錯誤我使用正則表達式。我也試過正回顧後如下圖所示,這似乎工作,但我不知道這是否是這樣做的正確方式:

import re 
sample_response = 'var0 = 0x00000001\r\nTrue\r\n' 
re_true = re.compile(r'(?<=(True\r\n))') 
print re_true.search(sample_response).group(0) # Will print out '' 
print re_true.search(sample_response).group(1) # Will print out 'True\r\n' 
+0

是的,但regex101沒有'\ r',其換行的風格是'\ N'。你的正則表達式在你嘗試輸入'\ r'之前與''r''匹配,並且它是在NFA正則表達式中獲勝的第一個選擇。嘗試're.findall'或重新考慮要求。 –

+0

是的,我在regex101.com上使用\ n來測試我的正則表達式......不管那個,regex101的參考可能是TMI,並不是真的是我的問題:) – schaazzz

+0

我會用findall來測試...謝謝! – schaazzz

回答

1

你說你需要匹配True\r\nFalse\r\n,那麼你的模式中的^[.]+|[\r]+|是多餘的。使用

re.search(r'[\r\n]*\b(?:True|False)[\r\n]*$', s) 

還是離開了最初的[\r\n]*,如果你需要TrueFalse前不換行。

詳細

  • [\r\n]* - 零個或多個CR或LF符號
  • \b - 字邊界
  • (?:True|False) - 要麼TrueFalse作爲整個單詞
  • [\r\n]* - 如上
  • $ - e字符串的nd。
相關問題