Вот, не регулярное выражение, не на основе расщепленной подход:
from itertools import groupby
def word_rstrip(s, to_rstrip):
words = (''.join(g) for k,g in groupby(s, str.isspace))
new_words = (w.rstrip(to_strip) for w in words)
return ''.join(new_words)
Это работает первым использованием itertools.groupby группироваться смежных символов в зависимости от того или нет вы их пробельные:
>>> s = "a!a b! c!!"
>>> [''.join(g) for k,g in groupby(s, str.isspace)]
['a!a', ' ', 'b!', ' ', 'c!!']
Фактически, это похоже на сохранение пробелов .split()
. После того, как мы получили это, мы можем использовать rstrip
как мы всегда были бы, а затем рекомбинируют:
>>> [''.join(g).rstrip("!") for k,g in groupby(s, str.isspace)]
['a!a', ' ', 'b', ' ', 'c']
>>> ''.join(''.join(g).rstrip("!") for k,g in groupby(s, str.isspace))
'a!a b c'
Мы также можем передать то, что нам нравится:
>>> word_rstrip("a!! this_apostrophe_won't_vanish these_ones_will'''", "!'")
"a this_apostrophe_won't_vanish these_ones_will"
что, если я, чтобы избавиться от котировок (') и двойные кавычки ("), а не только (!)? –