在Python中移除句子末尾的句号

4

我有这样的句子 -“this is a test. 4.55 and 5,000.” 我希望删除句子末尾的句点,但不是在数字之间。我的输出必须是 -“this is a test 4.55 and 5,000” 我尝试了以下选项,但没有得到所需的输出:

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

我也尝试了以下两种方法:

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

我不知道哪里出了错,有人能给我一些指点吗?我查看了之前的帖子并尝试了它们,但对于我的情况它们并没有起作用。

如果你只想删除句子末尾的句点,为什么不使用\.$(带有多行标志)呢? - Firas Dib
我想删除句子末尾的句号,但不删除数字之间的句号。如果句号不在句子末尾,也不在数字之间,应该怎么处理? - Mark Byers
我在我的样本文本中没有看到任何这样的例子。但我相信应该保留它们。 - Sarvavyapi
引用我自己的话:“仅使用正则表达式的纯语法方法听起来有问题……想想美国史密斯教授告诉我们句点可以有5.5种用法。” - DSM
3个回答

7
在正则表达式中,特殊字符$"[匹配]字符串的结尾或者是字符串末尾的换行符之前"
在这种情况下,假设每行只有一个句子,我建议采用以下方式:
\.$

此表达式仅匹配出现在字符串结尾(或多行字符串的行尾)的句点。当然,如果您无法保证每行只有一个完整句子,则此解决方案可能并不适用于您。


谢谢。但是,这对于我所有的文本都不起作用。我每行有多个句子。 - Sarvavyapi
@Sarvavyapi 很抱歉我无法帮助你。不过,我认为我会保留我的回答,以防将来有人发现这个问题并能使用我的解决方案。祝你好运。 - acattle
这在需要替换句子结尾处的“.”而不是句子内部的Java代码中运作良好,例如:这不应该替换“www.abc.com”中的点,但会替换“句子结尾”的点。 - Aadil

6

尝试使用负向先行断言:

\.(?!\d)

这个匹配的是任何不紧跟着数字的句号。

谢谢。这个有效。我会用它来测试我的整个样本文本。 - Sarvavyapi
如果你只涉及数字,那么很好,但是句子中可能以许多其他方式出现句点:自1964年1月29日以来,我就比起Dr. Strangelove更喜欢Col. Sanders...但我最爱美利坚合众国。 - speedplane
这应该是最佳答案。 - Victor Vulovic

0

怎么样?

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

这将句号后面的空格替换为一个空格。


谢谢。这个有效。但是我猜想,由于我有大量的文本,可能会出现句号后没有空格的情况。 - Sarvavyapi
哦,如果你得到像“……更多新闻在11.6人受伤的……”这样的文本怎么办?或者像“该方法被命名为foo.bar”这样的文本呢? - nneonneo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接