正则表达式不与蟒蛇正常工作
我有这样的代码正则表达式不与蟒蛇正常工作
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
正则表达式也剥离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
S) - 为什么? - 你真的想要正则表达式以这种方式工作吗?
编辑:
因此,根据您的意见,要
- 带前后空白完全
- 凝结多个连续的空格字符转换成一个空格(ASCII 32)。
然后使用
cleaned_mydata = re.sub(r'\s+', ' ', mydata[0].strip())
我用Scrapy报废网站,并在那里使用。我不知道为什么会出现这种情况。我只想删除blamk空间并\ r \ n – user825904
@ user32:请更具体。什么*确切*你想要删除?我不认为你想让你的结果成为'212jobscontainingphpinxxxx'。 –
我想要的结果是“包含在xxx中的php的212个作业” – user825904
什么是你想匹配? – npinti
我试图删除多个空格和结束行。我从互联网复制这个,我不知道它究竟做了什么 – user825904
作为一个测试,为什么不替换可见的东西,而不是:ur'\ 1',使用:'XYZ'。在运行正则表达式之前,为什么不移除\ r \ n?此外,当使用标志=他们应该OR'd在一起,而不是ADDED(即使用|不+ +) – fileoffset