Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用re从文本中提取电话号码?_Python_Regex - Fatal编程技术网

Python 使用re从文本中提取电话号码?

Python 使用re从文本中提取电话号码?,python,regex,Python,Regex,我需要提取电话号码,但我的正则表达式不能提取所有号码 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]: ['

我需要提取电话号码,但我的正则表达式不能提取所有号码

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']

如何改进此表达式以获取所有电话号码?

这将为您提供所需的输出:

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)

但是你可能需要稍微调整一下表达式,这取决于你想考虑的电话号码。

这应该找到给定字符串

中的所有电话号码。 关于findall(r'+(?[1-9][0-9.-()]{8,}[0-9]',文本)

基本上,正则表达式列出了这些规则

  • 匹配的字符串可以以+或(符号)开头
  • 它后面必须跟一个介于1-9之间的数字
  • 它必须以0-9之间的数字结束
  • 可以包含0~9(空间)--()在中间。

  • 如果它们的格式很好,你能说,我怎么能忽略这个组合?`0015-002-2012,13999947069'和其他?在欧洲,人们用00代替+而在美国,001是“+”,所以你可能不想忽略这个。在法国,所有国家的电话号码都以单个0开头(01…-09…,其中06…&07…是移动电话).在德国,电话号码的形式为(0xxx)yyy(带括号或不带括号)或+zzz(xxx)yyy,其中0xxx是一个“城市前缀”,如果您在附近,则可以省略该前缀,其中yyy可以包含空格,有时也可以包含“-”(特别是用于公司和行政部门的扩展)
     >>> 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']