python - 正则表达式不能与 python 一起正常工作

标签 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)

第一个输出是

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/

相关文章:

python - 在 dask.read_sql_table 中添加 application_name 作为参数时出错

java - 正则表达式问题

java - 如何使用Java的replaceAll(regex,replacement)方法替换字符串中的所有方括号

ruby - 如何为类似字符串的正则表达式

python - 如何循环遍历 pandas 分组时间序列?

python - 如何在 for 循环中使用多处理并行化对具有不同参数的同一函数的两次调用?

python - 设置第一个 x 刻度 (0) 和 y 轴的间距

regex - Postgresql 替换所有出现的字符串+

javascript - 电话号码验证正则表达式

python - 使用 Python selenium 选择一个元素(文本)