为什么这个正则表达式不起作用

时间:2014-03-24 20:49:27

标签: python regex python-2.7 xpath scrapy

我正在使用python 2.7 with scrapy .20

我有这个测试

  

0552121152,+ 97143321090

我希望得到comma之前的值及其之后的值。

我的正则表达式是

\s*(.*),之前的那个

,\s*(.*)

之后的那个

在两种方式中我都进行了整体测试。

为什么请?

修改

谁需要详细信息,请点击:

这是我正在抓取的页面http://www.justproperty.com/apartments/old-town/1092713-amazing-2br-apartment-in-the-old-town-island-with-a-burj-khalifa-and-address-hotel-view.html

这是我在shell中的cmd中的scrapy代码:

    s =sel.xpath("normalize-space(.//span[@class='content_agent']/span[last()]/span[2]/text())")
 s.re(r'\s*(.*),')

注意

我不是在询问获取这些值的解决方案,我问的是为什么我提到的 - 正则表达式无法正常工作

3 个答案:

答案 0 :(得分:3)

尝试这样做:

import re

string = "0552121152, +97143321090"
pattern = re.compile(r"\s*(.*),\s*(.*)")

print pattern.search(string).groups()

结果:

('0552121152', '+97143321090')
[Finished in 0.3s]

唯一的区别可能是因为我使用了.groups()方法,这就是我得到它的原因。如果您可以在最后重现这一点,那么 这不是您的正则表达式错误 ,而是您的编码风格。

除此之外,我没有看到正则表达式是如何失败的。

答案 1 :(得分:2)

这是因为.也匹配,而且它是一个贪婪的选择。使用更具体的内容,例如[^,]\d代替.符号。

答案 2 :(得分:0)

这样的内容会将部分存储在\1中的逗号之前,以及\2中逗号之后的部分

/(\s?[\d]+)(?:[, ]+)([+\d]+)/

这会查找可选数量的空白字符,后跟一些数字。然后它会查找空格或逗号(或两者),后跟另一个由数字字符类和/或加号组成的字符串。