2017-08-12 10 views
1

私は電話番号を抽出する必要がありますが、私の正規表現は、すべての数字reを使用してテキストから電話番号を抽出しますか?

text = '+79082343434 8(912)2342554, +7 982 342 sdfdsf 34 34 fsf 8-923-132-34-23 +7 982 342 34 34! sdfsd' 
r = re.compile(r"\+?\d{1,3}?[- .]?\(?(?:\d{2,3})\)?[- .]?\d\d\d[- .]?\d\d\d\d") 
phone = r.findall(text) 

Out[7]: ['+79082343434', '8(912)2342554'] 

欲望の出力抽出しません:

['+79082343434', '8(912)2342554', '8-923-132-34-23', '+7 982 342 34 34'] 

どのように私はすべての電話番号を取得するには、この表現を向上させることができますか?

+0

フォーマットがうまくいけば、http://ideone.com/MQpoeRを参照してください。 –

答えて

2

これは、あなたが望む出力与える:

text = '+79082343434 8(912)2342554, +7 982 342 sdfdsf 34 34 fsf 8-923-132-34-23 +7 982 342 34 34! sdfsd' 
regex = re.compile("\+?\d[\(-]?\d{3}[\) -]?\d{3}[ -]?\d{2}[ -]?\d{2}") 
numbers = re.findall(regex, text) 

をしかし、あなたは、あなたが電話番号を検討する必要が正確に何に応じて、表現ビット微調整する必要がある場合があります。

+0

どうすればこの組み合わせを無視できますか? 「0015-002-2012,13999947069」など? –

0

これは、指定された文字列内のすべての電話番号

re.findall(R '+?(?[1-9] [0-9 .-()] {8} [0-を見つける必要があり9]」、テキスト)

>>> re.findall(r'[\+\(]?[1-9][0-9 .\-\(\)]{8,}[0-9]', text) 
['+79082343434 8(912)2342554', '8-923-132-34-23', '+7 982 342 34 34'] 

は基本的に、正規表現は

  1. これらのルールをレイアウトマッチした文字列が+または(シンボル
  2. で開始することができるそれは1の間の数、続いてなければなりません-9
  3. 0-9の数字で終了する必要があります。
  4. 途中に0-9(スペース).-()を含むことがあります。
関連する問題