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

时间:2015-07-07 11:14:14

标签: python regex

我有一个像这样的地址字符串

addr_str = "No 123 4th St, 5th Ave NYC\n\tPhone: 9938483902"

目前,我正在使用正则表达式从字符串末尾提取phone number,如下所示:

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

我刚才意识到有一些电话号码:

040-38488993 
3888-32888222 
01854-29924402

如何更改此正则表达式以获取连字符前的数字?有什么帮助吗?

请注意,连字符前面的位数变化不大,我也有数字,没有任何连字符,我也需要。

6 个答案:

答案 0 :(得分:2)

只需将-\d放入char类。

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

如果电话号码以可选的+开头,那么你可以试试这个,

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

答案 1 :(得分:1)

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

你可以简单地修改你的正则表达式。如果只有1 -使用

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

答案 2 :(得分:1)

您可以让您的数字模式包含可选的减号,并期望该组重复1或2次。

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

答案 3 :(得分:1)

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

我建议this

addr_str = "No 123 4th St, 5th Ave NYC\n\tPhone: 1-800-MALL"
idx = addr_str.find("Phone: ")
if idx > -1:
    print addr_str[idx+7:]
else:
    print addr_str

或者,如果仍然需要正则表达式,another solution

import re
addr_str = "No 123 4th St, 5th Ave NYC\n\tPhone: 1-800-MALL"
print re.search(r"Phone:\s*(.*)$", addr_str).group(1)

答案 4 :(得分:0)

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

来执行此操作
((\d+-)?\d+)$

示范:https://regex101.com/r/wV6zP7/1

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

答案 5 :(得分:0)

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

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