说,如果我有这样的文字
text='a!a b! c!!!'
我想要这样的结果:
text='a!a b c'
所以,如果每个单词的结尾都是'!',我想摆脱它。如果有多个 '!' 总之一句话,全部被淘汰。
说,如果我有这样的文字
text='a!a b! c!!!'
我想要这样的结果:
text='a!a b c'
所以,如果每个单词的结尾都是'!',我想摆脱它。如果有多个 '!' 总之一句话,全部被淘汰。
print " ".join(word.rstrip("!") for word in text.split())
作为拆分/剥离方法的替代方案
" ".join(x.rstrip("!") for x in text.split())
它不会完全保留空格,您也许可以使用正则表达式,例如
re.sub(r"!+\B", "", text)
这会消除所有不是紧跟单词开头的感叹词。
import re
>>> testWord = 'a!a b! c!!!'
>>> re.sub(r'(!+)(?=\s|$)', '', testWord)
'a!a b c'
这保留了您的字符串中可能没有的任何额外空格str.split()
这是一种非正则表达式,非基于拆分的方法:
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"