2

我有这个代码

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用它剥离数字。我该如何解决

4

1 回答 1

1

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

这意味着

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

变成

u'\r212\rjobs containing php in xxxx '

当你打印这个时,212将被打印出来,然后回车会将光标返回到第一列,这样下面的内容jobs...就会覆盖212.

这提出了两个问题:

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

编辑:

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

  • 完全去除前导和尾随空格
  • 将多个连续的空白字符压缩成一个空格(ASCII 32)。

然后使用

cleaned_mydata = re.sub(r'\s+', ' ', mydata[0].strip())
于 2012-11-22T06:53:38.853 回答