2012-02-15 14 views
2

私はカリフォルニア北部の郵便番号と一致するこの正規表現を持っています。私はそれらを単一の正規表現に入れたいと思います。これは可能ですか?Python Regex Zipcode Matching

(re.match(r'9[0-2].+', zip) or re.match(r'93[0-5].+', zip)) 

私が試してみた:

re.match(r'9[0-2|3[0-5].+', zip) 
をしかし、これは動作しません。

+1

正規表現のテストを受けるたびに、http://ksamuel.pythonanywhere.com/のようなオンライン正規表現テスターで試してみてください。ほとんどの場合、それが動作するまで20分間試してみることがほとんどです。働いた。プラスを避けてください。 "より具体的にすることができれば、あなたの正規表現は速くなり、偽陽性が少なくなります。私はあなたが "$"、 "^"、または "#"を郵便番号に入れていないと確信しています。 –

答えて

5
re.match(r'9([0-2]|3[0-5]).+', zip) 
+0

ありがとう、Davidはちょうど同じ結論に達しました。 – scoopseven

+1

クール - それで受け入れることを忘れないでください。問題は解決済みとマークできます:-) –

+1

'。+'に問題があり、 '900'のような文字列がマッチしますか? –

3

あなたの正規表現で.を使用している理由は少し不思議です。 .は任意の文字と一致し、郵便番号には数字だけが含まれることがわかっています。

実際にほしいと思うのは(9[0-2]\d{3}|93[0-5]\d\d)です。

9([0-2]\d|3[0-5])\d\d短い正規表現です。

+0

2つの部分を分ける ' - '(オプションの2番目の部分がある場合)はどうでしょうか? – Marcin

+0

ハイフン(メークアップの例として92196-3942)を含めることができるZIP + 4コードに一致するように過大化している可能性があります。 – chepner

+0

@Marcin:ZIP + 4構文を意味しますか?最後に '( - \ d {4})? 'を追加するだけです。 – CanSpice