2016-08-19 4 views
-3

私は正規表現通常の電話番号と一致する表現ではなく、ジップコード

phone_regex = re.compile(r'(\+?\(?\+?\d{1,}\)?[-\s\.]?\d{1,}[-\s\.]?\d{1,}[-\s\.]?\d{1,}[-\s\.]?\d{1,}[-s\.]?)') 

の下に書かれているそれは、&に一致するには、国コードと一緒に電話番号を特定する( +91 9561217616(+91) 9561 217 616+(91) 9561217616+91-9833775049 を例えばそれはまた431003と一致zipcode)誰かが正規表現を書いて電話番号だけではなく、郵便番号と一致させるのを助けることができます

+1

最後の数値を3つ以上の整数にすることができます。 https://regex101.com/r/gV1qP8/1 '\ d {3、}'は本当に電話番号を必要としません。地元のコードを使用した米国の郵便番号はまだ一致します。 – chris85

+0

@ chris85に加えて、各桁を個別にチェックしているので正規表現を整理する必要があります。 – albert

答えて

1

(?:\+\d\d|\(\+\d\d\)|\+\(\d\d\))(?:\s+|-)\d{4}(?:\s+|-)?\d{3}(?:\s+|-)?\d{3}$

  • (?:\+\d\d|\(\+\d\d\)|\+\(\d\d\)) 00または(00)または+(00)
  • (?:\s+|-)いますギャップ(少なくとも1つのスペースまたは1つのダッシュ)
  • \d{4} 4数字000)
  • (?:\s+|-)?任意ギャップ(少なくとも1つのスペースまたは単一のダッシュまたはまったく-nothing)
  • \d{3} 3数字(000)
  • (?:\s+|-)?任意ギャップ
  • \d{3} 3つの数字(000)

郵便番号がこれらのすべての要件を満たしていないため、正規表現が合格しません。

+0

その国で働いていますが、国コードを取得できませんでした。入力として「Katraj、Pune 411037 + 91-9833775049」の出力が9833775049でした。+ 91-9833775049または+919833775049 –

+0

どういう意味でしょうか。正規表現の両端から '^'と '$'文字を削除し、それが何をしているか教えてください。 – Whothehellisthat

+0

文字列メソッドtranslate(None、 "\ s()、-_")を使用して空白、コンマ、(&)のような特殊文字をすべて削除しました &regex like(r '\ +?\ d {7、}')これは私に+ 919833775049のような出力を与えています –

1

一致の数を指定する必要があります{m, n}または{m}が好き:VERBOSE正規表現を使用した作業

regexp = r''' 
# matches phones, but not zipcodes. Use with VERBOSE regexps 
^  # start of the string 
\s*? # whitespaces, etc 
\+? # + char (optional) 
\s*? # whitespaces, etc 
\(? # (char (optional) 
([0-9]{3}) # 3 numbers 
\)? #) char (optional) 
( # group start 
    [\s-]?  # whitespace, - char (optionals) 
    [0-9]  # 1 number 
){7} # matches exactly 7 numbers 
\s*? # whitespaces, etc 
$  # end of the string 
''' 

phones = ['(123) 456 7899', '(123)-456-7899', '+1234567899', '+123 456-7899', 
      '12-34567899', '+123456789'] # these 2 dont match 
matches = [bool(re.match(regexp, num, re.VERBOSE)) for num in phones] 
print(matches) # gives [True, True, True, True, False, False] 

はあなたの偉大なデバッグ

関連する問題