【问题标题】:Why is my regex replacing more than I want it to?为什么我的正则表达式替换的比我想要的多?
【发布时间】:2021-04-01 01:50:14
【问题描述】:

这是一个字符串示例:“This is a \n\n\nTest”

这是我正在使用的代码

import re

def split_text_into_sentences(text):
    text = re.sub(r'\s+\n', '\n', text)
    return text

print([split_text_into_sentences('This is a     \n\n\nTest')])

由于某种原因,我得到了

['This is a\nTest']

但我期待

['This is a\n\nTest']

我认为 \s+\n 只会删除第一个 \n 之前至少有一个空格字符,但由于某种原因,其余的 \n 也被替换了。有人可以解释为什么吗?谢谢!

【问题讨论】:

  • \n 也是一个空白字符。

标签: python python-3.x regex


【解决方案1】:

\s 也包括\n

\s

对于 Unicode (str) 模式: 匹配 Unicode 空白字符(包括[ \t\n\r\f\v],以及许多其他字符,例如许多语言中的排版规则要求的不间断空格)。如果使用 ASCII 标志,则仅匹配 [ \t\n\r\f\v]

对于 8 位(字节)模式: 匹配 ASCII 字符集中被视为空白的字符;这相当于[ \t\n\r\f\v]

——https://docs.python.org/3/library/re.html

因此,您可能想改用r' +\n'。然而,即使在这种情况下,结果也会有三个 \ns,not This is a\n\nTest。如果后者不是错字并且您确实打算这样做,那么re.sub() 的第二个参数应该是''

【讨论】:

  • 他只在使用端行。
猜你喜欢
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多