我正在编写一个程序,必须将字符串“+”替换为“!”,并在特定文本中将“* +”替换为“!!”。举个例子,我需要来自:
some_text = ‘here is +some*+ text and also +some more*+ text here’
到
some_text_new = ‘here is !some!! text and also !some more!! text here’
你会注意到“+”和“* +”在我的文字中包含了特定的单词。在我运行程序之后,这些单词需要包含在“!”和“!!”之间。
我编写了以下代码,但在给出正确的输出之前它会迭代几次。我怎样才能避免那次迭代?...
def many_cues(value):
if has_cue_marks(value) is True:
add_text(value)
#print value
def has_cue_marks(value):
return '+' in value and'+*' in value
def add_text(value):
n = '+'
m = "+*"
text0 = value
for n in text0:
text1 = text0.replace(n, ‘!', 3)
print text1
for m in text0:
text2 = text0.replace(m, ‘!!’, 3)
print text2
答案 0 :(得分:0)
>>> x = 'here is +some*+ text and also +some more*+ text here'
>>> x = x.replace('*+','!!')
>>> x
'here is +some!! text and also +some more!! text here'
>>> x = x.replace('+','!')
>>> x
'here is !some!! text and also !some more!! text here'
replace的最后一个参数是可选的 - 如果你将其遗漏,它将替换该单词的所有实例。所以,首先在较大的子串上使用replace,这样你就不会意外地取出一些较小的子串,然后在较小的子串上使用replace,你应该全部设置。
答案 1 :(得分:-1)
可以使用正则表达式组完成
import re
def replacer(matchObj):
if matchObj.group(1) == '*+':
return '!!'
elif matchObj.group(2) == '+'
return '!'
text = 'here is +some*+ text and also +some more*+ text here'
replaced = re.sub(r'(\*\+)|(\+)', replacer, text)
请注意,组的顺序很重要,因为您要替换的两种模式中有共同的字符