2017-02-25 9 views
0

私はこの文字列を持っています。Regex - Python27を使用した数字と単語の正確な数を一致させよ

P O BOX 32370, CA 92263 

そして、この正規表現\w{2} \d{5}

しかし、それは太字で両方のテキストと一致しました。 "P O B OX 32370CA 92263"

実は私は州、および郵便番号を抽出したいです。

テキストを開始し、スペースを入力し、正確なアルファベットを2つ、次にスペースを1つ、正確な5桁を取得したいとします。

+1

あなたがいるようです単語の境界の後ろに置くには、\ b \ w {2} \ d {5} \ b'を使います。 –

答えて

1

あなたはパターンがワード文字(英数字とアンダースコア)を先頭または末尾ていないことを確認するためにワード境界\bを追加することができます。

import re 

re.findall(r"\b\w{2} \d{5}\b", "P O BOX 32370, CA 92263") 
#['CA 92263'] 
+0

ありがとうございます、 '\ d {5} \ b'に4または5の数字をつける条件をどうやって追加できますか?可能? – Umair

+0

'\ d {4,5} \ b'のように' {} 'の下限を指定することができます。これは4桁または5桁に一致します。 – Psidom

0

を強要、その後、テキストの開始とスペースをつかむために2アルファベット、次に1つは スペース、その後は正確な5桁です。

残念ながら、このパターン\b\w{2} \d{5}\bも、あなたの条件に適合しない結果を与える"P O BOX 32370, 2A 92263"などの文字列でマッチを見つけるでしょう。 \w - すべてのアルファベットに一致します数値文字です。
方法(試合のすべての名前付きのサブグループを取得します)re.search()match.groupdict()と、次のアプローチを使用し、および郵便番号を抽出するには:

s = 'P O BOX 32370, CA 92263' 
m = re.search(r'\b(?P<state>[a-zA-Z]{2}) (?P<zip_code>\d{5})\b', s) 
result = m.groupdict() if m else '' 

print(result) 

出力を:

{'zip_code': '92263', 'state': 'CA'} 
関連する問題