我是正则表达式的新手,我正在尝试编写电话号码模式,以便识别它们并能够提取它们。我的疑惑可以总结为以下简单的例子:
我首先尝试确定字符串中是否有类似 (+34) 的内容,它应该是可选的:
prefixsrch = re.compile(r'(\(?\+34\)?)?')
我以下列方式在以下字符串中进行测试:
line0 = "(+34)"
print prefixsrch.findall(line0)
产生结果:
['(+34)',''] 我的第一个问题是:为什么它会找到两次出现的模式?我想这与前缀是可选的这一事实有关,但我并不完全理解它。无论如何,现在我的大疑问
如果我们做类似的事情来搜索 9 位数字的模式,我们会得到相同的结果:
numsrch = re.compile(r'\d{9}')
line1 = "971756754"
print numsrch.findall(line1)
产生类似的东西:
['971756754']
这很好。现在我想要做的是识别一个 9 位数字,前面有或没有,由 (+34)。因此,据我了解,我应该执行以下操作:
phonesrch = re.compile(r'(\(?\+34\)?)?\d{9}')
如果我在以下字符串中测试它......
line0 = "(+34)971756754"
line1 = "971756754"
print phonesrch.findall(line0)
print phonesrch.findall(line1)
令我惊讶的是,这是我得到的:
['(+34)'] ['']
我期望得到的是 ['(+34)971756754'] 和 ['971756754']。有人对此有见识吗?非常感谢你。