正则表达式与python无法正常工作

时间:2012-11-22 06:02:23

标签: python regex

我有这段代码

site = hxs.select("//h1[@class='state']")
mydata = site.select("string()").extract()
cleaned_mydata = re.sub(ur'(\s)\s+', ur'\1', mydata[0], flags=re.MULTILINE + re.UNICODE)

        log.msg(str(mydata),level=log.ERROR)
        log.msg(str(cleaned_mydata),level=log.ERROR)

第一个输出是

  

错误:[u'\ r \ n 212 \ r \ n在xxxx中包含php的作业   \ r \ n']

其他输出

  

在xxxxxx中包含php的作业

正则表达式也正在剥离212数字。我该如何解决?

1 个答案:

答案 0 :(得分:1)

问题是这个正则表达式留下了它找到的第一个空格,并且只删除了后续的空格。

这意味着

u'\r\n 212\r\n jobs containing php in xxxx \r\n '

变为

u'\r212\rjobs containing php in xxxx '

打印时,将打印212,然后回车会将光标返回到第一列,以便以下jobs...覆盖212。< / p>

这提出了两个问题:

  • 您似乎正在以二进制模式阅读文本文件(否则\r\n会被标准化为\n s) - 为什么?
  • 你真的希望正则表达式以这种方式工作吗?

修改

所以,根据你的评论,你想要

  • 完全剥离前导和尾随空格
  • 将多个连续的空白字符压缩到一个空格中(ASCII 32)。

然后使用

cleaned_mydata = re.sub(r'\s+', ' ', mydata[0].strip())