说,如果我有像
这样的文字text='a!a b! c!!!'
我想要这样的结果:
text='a!a b c'
所以,如果每个单词的结尾都是'!',我想摆脱它。如果有多个'!'最后,所有这些都将被淘汰。
答案 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"