如何从Python中每个单词的右侧删除字符?

时间:2013-04-16 22:46:28

标签: python python-2.7 strip

说,如果我有像

这样的文字
text='a!a b! c!!!'

我想要这样的结果:

text='a!a b c'

所以,如果每个单词的结尾都是'!',我想摆脱它。如果有多个'!'最后,所有这些都将被淘汰。

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

作为拆分/剥离方法的替代方案

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

不能完全保留空格,你可以使用正则表达式,如

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

消除所有并非紧接着开头的感叹词。

答案 2 :(得分:2)

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

这会保留字符串中可能包含str.split()

时不会出现的任何额外空格

答案 3 :(得分: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"