我有这个HTML:
<p class="marB0">Phone:+97143396222<br>
Email:spf476@spfrealty.com</p>
我想获得电话号码
我得到这样的文字:
normalize-space(.//div[@class='authorinfo left'][2]/p[@class='marB0']/text())
结果是:
u'Phone:+97143396222 Email:spf476@spfrealt'
我试过这个正则表达式:
Phone:\s*(\d+\.\d+)(Email:)
但我的结果是空的
答案 0 :(得分:3)
您的模式未捕获+
或电子邮件:
In [19]: re.match("Phone:\s*\+?(\d+)\s*Email:\s*(.+)\s*",'Phone:+97143396222 Email:spf476@spfrealt').groups()
Out[19]: ('97143396222', 'spf476@spfrealt')
答案 1 :(得分:0)
如果您只想要电话号码,这种模式应该有效:
"Phone:\s*\+?(\d+)"
像这样使用它:
import re
pattern = "Phone:\s*\+?(\d+)"
text = "Phone:+97143396222 Email:spf476@spfrealt"
res = re.match(pattern, text).group(1)
print res
结果:
97143396222
[Finished in 0.3s]
如果有帮助,请告诉我们。
不太熟悉Scrapy,但我认为这应该或多或少地达到标准:
xxx.select("normalize-space(.//div[@class='authorinfo left'][2]/p[@class='marB0']/text())").re("\s*\+?(\d+)")
警告,但是,基于this,似乎这样做也会返回一个数组。
请测试一下,然后回复结果。