我正在寫一個python正則表達式,通過文本文件查看引用的字符串(從黑匣子錄製的航空公司飛行員的報價)。我開始嘗試使用以下規則編寫正則表達式:Python中的括號奇怪的行爲正則表達式
返回引號之間的內容。
如果它以單個打開,只有在關閉時才返回。
如果以double打開,只有在以double打開時才返回。
例如,我不想匹配「hi there」或「hi there」,但「hi there」和「hi there」。
我用一個測試網頁,其中包含了諸如:
CA "Runway 18, wind 230 degrees, five knots, altimeter 30."
AA "Roger that"
18:24:10 [flap lever moving into detent]
ST: "Some passenger's pushing a switch. May I?"
所以我決定開始簡單:
re.findall('("|\').*?\\1', page)
########## /("|').*?\1/ <-- raw regex I think I'm going for.
此正則表達式的作用非常意外。
我以爲它會:
- ( 「|」)匹配單個或雙引號,保存爲恢復參照/ 1。
- 。*?匹配非貪婪通配符。
- \ 1匹配它在後向參考\ 1中找到的任何內容(步驟一)。
相反,它返回一個引用數組,但從來沒有其他的東西。
['"', '"', "'", "'"]
我很困惑,因爲等效(afaik)正則表達式在VIM中工作得很好。
\("\|'\).\{-}\1/)
我的問題是這樣的:
爲什麼它僅僅返回的是括號內爲匹配?這是我對後向引用理解的缺陷嗎?如果是這樣,那麼爲什麼它在VIM中工作?
我如何編寫正在尋找的Python中的正則表達式?
謝謝你的幫助!
該文件仍然沒有意義,因爲我認爲羣體意味着潛在的匹配,而不是控制組。感謝您解決這個問題。 – 2012-07-28 19:15:36