如何從下面的字符串「提取」郵政編碼(美國)?正則表達式讓我們郵編
import re
address = "Moab, UT 84532"
postal_code = re.match('^\d{5}(-\d{4})?$', address)
print postal_code
如何從下面的字符串「提取」郵政編碼(美國)?正則表達式讓我們郵編
import re
address = "Moab, UT 84532"
postal_code = re.match('^\d{5}(-\d{4})?$', address)
print postal_code
首先,您使用的匹配,這會從字符串的開頭只匹配:看到http://docs.python.org/library/re.html#matching-vs-searching
而且,即使你使用的搜索,你不抓住,其中包括5組數字保證在那裏。
最後,即使你使用搜索,用克拉開始你的正則表達式^將迫使它從一開始,這顯然不會工作你的情況進行搜索。
>>> postal_code = re.search(r'.*(\d{5}(\-\d{4})?)$', address)
>>> postal_code.groups()
('84532', None)
Sberry,你爲什麼包括搜索模式中的'。\ *'? '。\ *'是否與地址中的「Moab,UT」部分相匹配,因此搜索將最終匹配整個「」Moab,UT 84532「?目前無法使用python訪問計算機我不能測試它,除此之外,你的圖案看起來很好看,我也喜歡它可以捕捉到擴展的郵政編碼 – Windle
假設郵政編碼總是5位(是美國的情況下,是不是?)
re.match( '\ d {5} $',地址)
會做。
評論是正確的關於比賽VS搜索,如果我想包括額外的4個字符:
re.search( '?\ d {5}( - \ d {4})$',地址)
應該這樣做。
我不同意,我們的郵政編碼可以包含額外的4位數字。這種情況下不會產生正確的結果,因爲它會從字符串的開頭相匹配。 – sberry
你可以使用:
postal_code = re.match('^.*?(\d+)$', address)
if postal_code!=None:
print postal_code.group(1)
這一個完全適用於所有這些格式:
99999-9999
address = '123 Main St, 12345-5678 USA'
re.search('(\d{5})([- ])?(\d{4})?', address).groups()
其結果是:( '12345', ' - ', '5678')
爲了獲得整個匹配,使用:
re.search('(\d{5})([- ])?(\d{4})?', address).group(0)
和組(1)&組(3)包含的兩個部分郵政編碼。我使用的比賽,而不是因爲我將其應用到只包含郵政編碼的字段。我也在這個案例的開頭和結尾處分別添加了^ $。
zip_code = '12345-6655'
re.match('^(\d{5})([- ])?(\d{4})?$', zip_code).group(0)
見鏈接[http://regexlib.com/REDetails.aspx?regexp_id=2](http://regexlib.com/REDetails.aspx?regexp_id=2) – Prasanth