Search code examples
pythontextreplace

How to replace multiple substrings of a string?


I would like to use the .replace function to replace multiple strings.

I currently have

string.replace("condition1", "")

but would like to have something like

string.replace("condition1", "").replace("condition2", "text")

although that does not feel like good syntax

what is the proper way to do this? kind of like how in grep/regex you can do \1 and \2 to replace fields to certain search strings


Solution

  • Here is a short example that should do the trick with regular expressions:

    import re
    
    rep = {"condition1": "", "condition2": "text"} # define desired replacements here
    
    # use these three lines to do the replacement
    rep = dict((re.escape(k), v) for k, v in rep.items()) 
    pattern = re.compile("|".join(rep.keys()))
    text = pattern.sub(lambda m: rep[re.escape(m.group(0))], text)
    

    For example:

    >>> pattern.sub(lambda m: rep[re.escape(m.group(0))], "(condition1) and --condition2--")
    '() and --text--'