我正在寫一個正則表達式來匹配電話號碼。我遇到的其中一個問題是一些郵編看起來像電話號碼。例如,在巴西,郵政編碼是這樣的:Python的正則表達式負向lookbehind沒有失敗的匹配
30.160-0131
因此,一個簡單的正則表達式將捕捉他們爲誤報:
In [63]: re.search(r"(?P<phone>\d+\.\d+-\d+)", "30.160-0131")
Out[63]: <_sre.SRE_Match at 0x102150990>
幸運的是,這樣的郵政編碼往往帶有前綴這通常意味着「郵政編碼」是這樣的:
CEP 30.160-0131
所以,如果你看到CEP中的東西,看起來像一個電話號碼前,那麼它是不是一個電話號碼 - 這是一個郵政編碼。我一直在試圖編寫一個正則表達式來捕獲使用negative lookbehind,但它不工作。它仍然匹配:
In [62]: re.search(r"(?<!CEP)(\d+\.\d+-\d+)", "CEP 30.160-0131")
Out[62]: <_sre.SRE_Match at 0x102150eb8>
爲什麼它仍然匹配,我怎麼能得到消極的後視失敗的比賽?
因爲它的一部分*可以匹配:http://regex101.com/r/aU4fV4/1 – jonrsharpe 2014-09-03 07:16:48