regex replace '…' at the end of the string

こ雲淡風輕ζ 提交于 2021-01-28 11:04:40

问题


I have a string like:

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

I want to replace the multiple '.'s to one '.' only when they are at the end of the string, i want the output to be:

python...is...fun.

So when there is only one '.' at the end of the string, then it won't be replaced

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

and the output is just the same as text2

My regex is like this:

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

which i want to match any string then {2 to n} of '.' at the end of the string, but the output is:

python...is...fun..

any ideas how to do this? Thx in advance!


回答1:


You are making it a bit complex, you can easily do it by using regex as \.+$ and replace the regex pattern with single . character.

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

You may extend this regex further to handle the cases with input such as ... only, etc but the main concept was that there is no need to counting the number of ., as you have done in your answer.




回答2:


Just look for the string ending with three periods, and replace them with a single one.

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



回答3:


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

As simple as that. Note that you need to escape the . because otherwise, it means whichever char except \n.




回答4:


I want to replace the multiple '.'s to one '.' only when they are at the end of the string

For such simple case it's easier to substitute without importing re module, checking the value of the last 3 characters:

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

print(text1)

The output:

python...is...fun.


来源:https://stackoverflow.com/questions/42242484/regex-replace-at-the-end-of-the-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!