迭代替换文本中的字符串

时间:2016-08-18 12:23:24

标签: python str-replace

我正在编写一个程序,必须将字符串“+”替换为“!”,并在特定文本中将“* +”替换为“!!”。举个例子,我需要来自:

 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

2 个答案:

答案 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)

请注意,组的顺序很重要,因为您要替换的两种模式中有共同的字符