我有这些字符串:
Phone: 3396222
Phone: +33333388
我想提取数字。
我试过这个正则表达式:
Phone:\s*(\d+\.\d+)
我正在使用scrapy,所以我的代码是这样的:sel.xpath(..).re(..)
答案 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+)
^^^ ^
我在您的输入中添加\+
时添加了可选的+
,从而进行了更新。