我有一个像这样的地址字符串
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
如何更改此正则表达式以获取连字符前的数字?有什么帮助吗?
请注意,连字符前面的位数变化不大,我也有数字,没有任何连字符,我也需要。
答案 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:]