我有这个代码
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)
第一个输出是
ERROR: [u'\r\n 212\r\n jobs containing php in xxxx \r\n ']
其他输出是
jobs containing php in xxxxxx
regex 也去除了 212
数字。我该如何解决这个问题
最佳答案
问题是这个正则表达式会留下它找到的第一个空格,而只去除后续的空格。
这意味着
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
会被规范化为\n
)- 为什么? - 您真的希望正则表达式以这种方式工作吗?
编辑:
所以,根据你的评论,你想要
- 完全去除前导和尾随空格
- 将多个连续的空白字符压缩成一个空格 (ASCII 32)。
然后使用
cleaned_mydata = re.sub(r'\s+', ' ', mydata[0].strip())
关于python - 正则表达式不能与 python 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506697/