【问题标题】:Remove periods at the end of sentences in python在python中删除句子末尾的句点
【发布时间】:2012-09-17 00:24:19
【问题描述】:

我有这样的句子 - “这是一个测试。4.55 和 5,000。” 我想删除句子末尾的句点,而不是数字之间的句点。我的输出必须是 - “这是一个测试 4.55 和 5,000” 我尝试了以下选项,但没有得到所需的输出:

wordList = "this is a test. 4.55 and 5,000."
pattern3 = re.compile("[^\w\d]+")
wordList = pattern3.sub(' ',wordList)

还尝试了以下2:

pattern3 = re.compile("[^\w]|^[0-9]\.[0-9]")
pattern3 = re.compile("[^\w]|^([0-9]/.[0-9]+)")

我不知道我哪里出错了。有人可以给我一些指示吗?我搜索了早期的帖子并尝试了它们,但它们不适用于我的情况。

【问题讨论】:

  • 如果只想去掉句尾的点,为什么不直接使用\.$(带多行标志)?
  • "我想删除句子末尾的句点,但不是数字之间的句点。"如果句号不在句末,也不在数字之间,应该怎么办?
  • 我在示例文本中没有看到任何此类示例。但我认为应该保留这些。
  • 引用我自己的话:“使用正则表达式的纯句法方法听起来有问题……想想美国的史密斯教授告诉我们的 5.5 种可以使用句号的方法。”

标签: python regex sentence


【解决方案1】:

尝试否定前瞻:

\.(?!\d)

这匹配的是任何不带数字的句号。

【讨论】:

  • 谢谢。这行得通。我将对整个示例文本进行测试。
  • 如果你只处理数字,很好,但句号可以通过更多方式出现在句子中间:I've liked Col. Sanders more than Dr. Strangelove since Jan. 29, 1964 ... but I love the U.S. of A. the most.
  • 这应该是最佳答案
【解决方案2】:

在正则表达式中,$ 特殊字符 "[matches] the end of the string or just before the newline at the end of the string"

在这种情况下,假设每行只有一个句子,我建议如下:

\.$

这将仅匹配出现在字符串末尾的句点(或多行字符串的行尾)。当然,如果你不能保证每行一个句子,那么它们不是你的解决方案。

【讨论】:

  • 谢谢。但是,这不适用于我的所有文本。我每行有多个句子。
  • @Sarvavyapi 对不起,我帮不了你。但是,我认为我会让我的回复可见,以防将来有人发现这个问题并可以使用我的解决方案。祝你好运。
  • 这适用于我需要替换 '.' 的 Java 代码。在句末,但不在句内,例如:这不应该替换“www.abc.com”中的点,而是替换“句末”中的点。
【解决方案3】:

怎么样

pattern = re.compile(r'\.(\s)')
wordList = pattern.sub(r'\1', wordList)

这会用空格替换句点后跟空格。

【讨论】:

  • 谢谢。这行得通。但是我想我有大量的文字,有些地方可能没有空格。
  • 嗯。那么,如果您收到类似“...更多消息在 11.6 人受伤...”之类的文字怎么办?还是像“方法名为 foo.bar”这样的文字?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
相关资源
最近更新 更多