次の文字列から郵便番号(米国)を「抽出する」方法は?正規表現米国の郵便番号を取得
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
まず、あなたは文字列の先頭からのみ一致する試合を、使用している:でも、あなたが検索を使用していた場合、あなたは5を含むグループをつかんされていない、またhttp://docs.python.org/library/re.html#matching-vs-searching
見ますそこにいることが保証されている数字。
最後に、あなたが検索を使っていたとしても、カラットで正規表現を始めると^が最初から検索されます。あなたのケースでは明らかに動作しません。郵便番号を想定し
>>> 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} $'、アドレス)
です致します。
コメントは、検索対マッチについての権利であると私は、余分な4つの文字を含める場合:
re.search( '\ dの{5}( - \ D {4})$?'、アドレス)
する必要があります。
私は郵便番号に4桁を追加することができます。この場合は、文字列の先頭から一致するため、正しい結果が得られません。 – sberry
あなたが使用することができます。
postal_code = re.match('^.*?(\d+)$', address)
if postal_code!=None:
print postal_code.group(1)
をこの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