2017-02-15 3 views
1

У меня есть строка, как:регулярное выражение заменить «...» в конце строки

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 заранее!

ответ

2

Вы делаете это немного сложным, вы можете легко сделать это, используя регулярное выражение как \.+$ и замените шаблон регулярного выражения одним символом ..

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

Вы можете продлить это регулярное выражение в дальнейшем рассматривать дела с участием таких как ... только, и т.д., но основная концепция в том, что нет необходимости подсчета количества ., как вы сделали в своем ответе.

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

Как простой. Обратите внимание, что вам нужно избежать ., потому что в противном случае это означает, что char кроме \n.

0

Просто найдите строку, заканчивающуюся тремя периодами, и замените их на одну.

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

Это только заменит ровно три. – Brandin

+0

Обновлено для замены 2 или более. С одним. – Scovetta

0

Я хочу, чтобы заменить несколько 'Вот к одному' «. только тогда, когда они находятся на конец строки

Для такого простого случая легче заменить без импорта re модуля проверки значения последних 3-х символов:

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

print(text1) 

Выход:

python...is...fun. 
Смежные вопросы