2013-04-16 1 views
3

Скажем, если у меня есть текст, какКак стирать символы с правой стороны каждого слова в Python?

text='a!a b! c!!!' 

Я хочу, чтобы результат, как это:

text='a!a b c' 

Так, если в конце каждого слова, я хочу, чтобы избавиться от «!» Это. Если есть несколько '!' в конце слова, все они будут устранены.

+0

что, если я, чтобы избавиться от котировок (') и двойные кавычки ("), а не только (!)? –

ответ

4
print " ".join(word.rstrip("!") for word in text.split()) 
+1

Это может возвращать другую строку, если текст содержит вкладки или различные пробелы. –

+1

Просто исправить это, просто используйте' text.split (' ') ' – jamylak

+0

@ jamylak, который не будет разделен на вкладки, которые могут быть в строке – Matt

1
import re 
>>> testWord = 'a!a b! c!!!' 
>>> re.sub(r'(!+)(?=\s|$)', '', testWord) 
'a!a b c' 

Это сохраняет все лишние пробелы, вы можете иметь в строке, которая не случается с str.split()

+0

Почему вместо '$' используется '\ Z'? – jamylak

+0

@jamylak, потому что по какой-то причине я забыл о $, я обновил его – Matt

3

В качестве альтернативы расщепленной/полосы подход

" ".join(x.rstrip("!") for x in text.split()) 

, который выиграл» t сохраните пробел точно, вы можете использовать регулярное выражение, такое как

re.sub(r"!+\B", "", text) 

, который вычеркивает все восклицания, которые не сразу сопровождаются началом слова.

+0

У регулярного выражения, которое вы опубликовали, есть проблемы со строками, такими как 'a !! b'. – Matt

+0

Вы хотите '\! + \ B (?! \ S)'. –

0

Вот, не регулярное выражение, не на основе расщепленной подход:

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" 

 Смежные вопросы

  • Нет связанных вопросов^_^