Python重新模块前缀

时间:2016-07-07 13:13:34

标签: python

我现在正在学习Python3并且已经来到re模块。我想写一个模式,搜索给定的字符串移动号码。对于印第安人,   re.compile(r'\d\d\d\d\d\d\d\d\d\d')应该足够了。但印度也有 使用+910作为国家/地区代码,我也想在结果中包含这些内容。 我试过了:

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'。

2 个答案:

答案 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中找到的更多信息。