Python re模块前缀

2024-04-23 18:59:51 发布

您现在位置: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=99xxxxxxxxx,no2=+9199xxxxxxxxx”。你知道吗


Tags: 模块字符串代码文本re编辑string模式
2条回答

电话号码的好模式是

_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。你知道吗

首先,可以使用限制来指定位数,而不是全部键入。其次,如果您不想单独获得捕获的组的结果,可以使用非捕获分组(通过在组的前面添加?:)。你知道吗

r = re.compile(r'(?:0|\+91)?\d{9}')

关于re.findall()的结果,它将返回所有匹配的groupincludegroup0,它是正则表达式匹配字符串的结果。在本例中,如果它没有返回您的字符串,可能是因为您的输入字符串与这个正则表达式不匹配。你知道吗

相关问题 更多 >