2017-08-12 133 views
1

我需要提取的電話號碼,但我的正則表達式不提取所有數字從文本中提取電話號碼,

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(空格).-()。