我现在正在学习Python3并且已经来到re
模块。我想写一个模式,搜索给定的字符串移动号码。对于印第安人,
re.compile(r'\d\d\d\d\d\d\d\d\d\d')
应该足够了。但印度也有
使用+91
和0
作为国家/地区代码,我也想在结果中包含这些内容。
我试过了:
r = re.compile(r'(0|\+91)?\d\d\d\d\d\d\d\d\d\d')
然后返回
['+91', '0', '']
作为r.findall(string)
的输出。如何解决这个问题?
编辑:字符串可以是任何文字,例如' no1 = 99xxxxxxxxxx,no2 = + 9199xxxxxxxxxx'。
答案 0 :(得分:2)
首先,你可以使用限制来指定数字而不是全部输入。其次,如果您不希望单独捕获组的结果,则可以使用非捕获分组(通过在组的前导处添加?:
)。
r = re.compile(r'(?:0|\+91)?\d{9}')
关于re.findall()
的结果,它将返回所有匹配的组,包括组0,这是正则表达式匹配的字符串的结果。在这种情况下,如果它没有返回你的字符串,可能是因为你的输入字符串不能与这个正则表达式匹配。
答案 1 :(得分:0)
电话号码的好模式是
_pattern = \
"""
^ # string start
[+]? # optional "+"
[\d \(\)]* # a number of digits, blanks or brackets
[/]? # an optional slash
[\d \(\)]* # number of digits, blanks, brackets an this repeated none, once or multiple times
(([ ]?-)? # optional: a hyphen and ...
[ ]?[\d \(\)]*)? # ... an optional blank and optional a number of digits, blanks or brackets
$ # string end
"""
此模式不会捕获每个语法错误。您在this web page中找到的更多信息。