我想知道我目前拥有的Python Regex解决方案是否更好?目前我的代码是:
import re
n = '+17021234567'
m = '7021234567'
match = re.search(r'(?:\+1)?(\d{10})', n)
match.group(1)
match = re.search(r'(?:\+1)?(\d{10})', m)
match.group(1)
代码的目标是仅提取10位数的ph#,如果它具有前导+1
。目前它有效,但我想知道有没有办法只需拨打match.group()
即可获得10位数的ph#而无需拨打match.group(1)
?
答案 0 :(得分:2)
不,如果不使用捕获组,则无法通过re.match
功能实现。因为re.match尝试从头开始匹配输入字符串。但是可以通过re.search
>>> re.search(r'\d{10}$', n).group()
'7021234567'
>>> re.search(r'\d{10}$', m).group()
'7021234567'
答案 1 :(得分:1)
你想只捕获数字使用'\ d'代表数字
n = '+17021234567'
re.findall('\d{10}$',n)
答案 2 :(得分:1)
使用此模式
(?<=^|\+1)\d{10}$
(?<= look behind to see if there is: ^ the beginning of the string | OR \+1 '+1' ) end of look-behind \d{10} digits (0-9) (10 times) $ before an optional \n, and the end of the string