Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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正则表达式使用连字符提取电话号码_Python_Regex - Fatal编程技术网

使用Python正则表达式使用连字符提取电话号码

使用Python正则表达式使用连字符提取电话号码,python,regex,Python,Regex,我有这样一个地址字符串 addr_str = "No 123 4th St, 5th Ave NYC\n\tPhone: 9938483902" 目前,我正在使用正则表达式从字符串末尾提取电话号码,如下所示: phone = re.search(r'\d+$', addr_str) print phone.group() 我刚刚意识到有些电话号码如下: 040-38488993 3888-32888222 01854-29924402 如何更改此正则表达式以获得连字符之前的数字?有什么

我有这样一个地址字符串

addr_str = "No 123 4th St, 5th Ave NYC\n\tPhone: 9938483902"
目前,我正在使用正则表达式从字符串末尾提取电话号码,如下所示:

phone = re.search(r'\d+$', addr_str)
print phone.group()
我刚刚意识到有些电话号码如下:

040-38488993 
3888-32888222 
01854-29924402
如何更改此正则表达式以获得连字符之前的数字?有什么帮助吗


请注意,连字符前的位数变化不规则,我也有一些没有连字符的数字,这也是我需要的。

只需将
-
\d
放在char类中即可

phone = re.search(r'[\d-]+$', addr_str)
如果电话号码以可选的
+
开头,则您可以尝试此功能

phone = re.search(r'\+?\d+(?-\d+)*$', addr_str)

只需将
-
\d
放入char类中即可

phone = re.search(r'[\d-]+$', addr_str)
如果电话号码以可选的
+
开头,则您可以尝试此功能

phone = re.search(r'\+?\d+(?-\d+)*$', addr_str)

假设您只想允许一个连字符的部分,那么您可以使用一个可选组来实现这一点

((\d+-)?\d+)$
演示:


例如,这将与“0123-456789”匹配,但与“0123-456-789”不匹配。

假设您只允许一个连字符部分,则可以使用可选组执行此操作

((\d+-)?\d+)$
演示:

例如,这将匹配“0123-456789”,但不匹配“0123-456-789”

您可以简单地将正则表达式修改为该值。如果始终只有1
-
的可能性,请使用

phone = re.search(r'\d+-\d+$', addr_str)
您可以简单地将正则表达式修改为该值。如果始终只有1
-
的可能性,请使用

phone = re.search(r'\d+-\d+$', addr_str)

你可以让你的数字模式包含可选的减号,并期望组重复1到2次

phone = re.search(r'(\d+-?){1,2}$', addr_str)

你可以让你的数字模式包含可选的减号,并期望组重复1到2次

phone = re.search(r'(\d+-?){1,2}$', addr_str)

如果电话号码前总是有空格,为什么不简单地:

phone = addr_str[addr_str.rfind(' ') + 1:]

如果电话号码前总是有空格,为什么不简单地:

phone = addr_str[addr_str.rfind(' ') + 1:]

如果您的字符串始终包含
Phone:
,并且电话号码紧跟其后,则不需要正则表达式。另外,请注意
1-800-MALL
也是一个有效的电话号码

我建议:

或者,如果regex仍然更可取,则:


如果您的字符串始终包含
Phone:
,并且电话号码紧跟其后,则不需要正则表达式。另外,请注意
1-800-MALL
也是一个有效的电话号码

我建议:

或者,如果regex仍然更可取,则:


电话:“将始终在电话的开头?”?。事实上,这个字符串中可能有很多数据,基本上最好有一些关键字用于解析信息,或者将数据存储在字典或数据库中smth@Dmitry.Samborskyi,你的意思是电话号码总是在字符串的末尾吗?是的,它会的。关键是你可以很容易地找到“Phone:”的位置,并使用regex放弃。如果你想要所有的数字或破折号在字符串的末尾,为什么不
r'[\d\-]+$”
?你需要在结果中保留连字符还是只想要数字?“Phone:”将始终在Phone的开头?。事实上,这个字符串中可能有很多数据,基本上最好有一些关键字用于解析信息,或者将数据存储在字典或数据库中smth@Dmitry.Samborskyi,你的意思是电话号码总是在字符串的末尾吗?是的,它会的。关键是你可以很容易地找到“Phone:”的位置,并使用正则表达式放弃。如果你想要所有的数字或破折号在字符串的末尾,为什么不
r'[\d\-]+$”
?你需要在结果中保留连字符还是只想要数字?谢谢!没想到这么简单:)谢谢!没想到这么简单:)