正则表达式从text()获取字符串

时间:2014-03-10 22:07:20

标签: python regex python-2.7 scrapy

我有这个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:)

但我的结果是空的

2 个答案:

答案 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,似乎这样做也会返回一个数组。

请测试一下,然后回复结果。