正则表达式替换字符串末尾的“...”

时间:2017-02-15 06:52:40

标签: python regex string

我有一个字符串:

text1 = 'python...is...fun...'

我想将多个'。'替换为''。'只有当它们在字符串的末尾时,我希望输出为:

python...is...fun.

所以只有一个'。'在字符串的末尾,它将不会被替换

text2 = 'python...is...fun.'

,输出与text2

相同

我的正则表达式是这样的:

text = re.sub(r'(.*)\.{2,}$', r'\1.', text)

我想匹配任何字符串然后{2到n}的'。'在字符串的末尾,但输出是:

python...is...fun..

任何想法如何做到这一点? Thx提前!

4 个答案:

答案 0 :(得分:2)

您使它变得有点复杂,您可以使用正则表达式\.+$轻松完成此操作,并将正则表达式模式替换为单个.字符。

>>> text1 = 'python...is...fun...'
>>> new_text = re.sub(r"\.+$", ".", text1)
>>> 'python...is...fun.'

你可以进一步扩展这个正则表达式来处理只有...等输入的情况,但主要的概念是没有必要计算.的数量,就像你做的那样在你的回答中。

答案 1 :(得分:1)

只需查找以三个句点结尾的字符串,并将其替换为一个句点。

import re
x = "foo...bar...quux..."
print(re.sub('\.{2,}$', '.', x))
// foo...bar...quux.

答案 2 :(得分:0)

import re
print(re.sub(r'\.{2,}$', '.', 'I...love...python...'))

就这么简单。请注意,您需要转义.,否则,它意味着任何一个字符 除了\n

答案 3 :(得分:0)

  

我想将多个'替换为一个'。'只有当他们在   字符串的结尾

对于这种简单的情况,在不导入re模块的情况下更容易替换,检查最后3个字符的值:

text1 = 'python...is...fun...'
text1 = text1[:-2] if text1[-3:] == '...' else text1

print(text1)

输出:

python...is...fun.