Python正则表达式从句子末尾的数字中删除句点

时间:2014-02-17 22:17:15

标签: python regex

如果我有这样的字符串:    “我喜欢3.142和2号。”

我想删除2之后但不是3.142中的期间,我应该如何执行此操作?基本上,如何检查一个句号后面的数字是否在句点后没有数字,如何删除该句号?感谢。

4 个答案:

答案 0 :(得分:2)

>>> import re
>>> s = "I. always. like the numbers 3.142, 5., 6.12 and 2. Lalala."

>>> re.sub('((\d+)[\.])(?!([\d]+))','\g<2>',s)
'I. always. like the numbers 3.142, 5, 6.12 and 2 Lalala.'

答案 1 :(得分:2)

Wrikken在上述评论中写了一个很好的解决方案, 只有当它出现在一个数字后面并且后面没有数字时才会删除它:

import re
sen = "I like the numbers 3.142 and 2. and lalala."
p = re.compile("(?<=\d)(\.)(?!\d)")
new_sen = p.sub("",sen)
print (new_sen)  #prints: I like the numbers 3.142 and 2 and lalala.

答案 2 :(得分:1)

如果您只想删除行尾的句点:

>>> import re
>>> sentence = "I like the numbers 3.142 and 2."
>>> re.sub(r'\.+$', '', sentence)
'I like the numbers 3.142 and 2'

如果要删除任何后跟数字的小数,请使用否定前瞻:

>>> re.sub(r'\.(?!\d)', '', sentence)
'I like the numbers 3.142 and 2'

答案 3 :(得分:0)

在多线模式下,这应该有效。在全球范围内使用。
这将一次处理多行字符串 它找到最后一个句点,在行尾为可选的非换行空格 用先行断言检查。

查找:

\.(?=[^\S\r\n]*$)

替换:""