为什么这个正则表达式返回空

时间:2014-03-15 20:06:25

标签: python regex python-2.7 xpath scrapy

我有这些字符串: Phone: 3396222 Phone: +33333388

我想提取数字。

我试过这个正则表达式:

Phone:\s*(\d+\.\d+)

但我的结果是空的

我正在使用scrapy,所以我的代码是这样的:sel.xpath(..).re(..)

请不要建议在python中使用其他功能而不是正则表达式

2 个答案:

答案 0 :(得分:2)

您的正则表达式在文本中需要 .点,但您的示例输入没有。

演示:

>>> import re
>>> re.search(r'Phone:\s*(\d+\.\d+)', 'Phone: 3396222') is None
True
>>> re.search(r'Phone:\s*(\d+\.\d+)', 'Phone: 339.6222').group(1)
'339.6222'

如果您想使您的任意一个样本电话号码匹配,请删除\.(而不是将其添加到字符集中)并在表达式中添加一个可选的+

r'Phone:\s*(\+?[\d.]+)'

演示:

>>> re.search(r'Phone:\s*(\+?[\d.]+)', 'Phone: 3396222').group(1)
'3396222'
>>> re.search(r'Phone:\s*(\+?[\d.]+)', 'Phone: +33333388').group(1)
'+33333388'

此模式还允许数字中的任意数量的点:

>>> re.search(r'Phone:\s*(\+?[\d.]+)', 'Phone: +333.333.88').group(1)
'+333.333.88'

答案 1 :(得分:1)

你在正则表达式中要求强制点(。)。将它配对可选:

Phone:\s*\+?(\d+\.?\d+)
         ^^^      ^

我在您的输入中添加\+时添加了可选的+,从而进行了更新。