Source code for stdatamodels.basic_utils

import re


__all__ = ["multiple_replace"]


[docs] def multiple_replace(string, rep_dict): """Single-pass replacement of multiple substrings Similar to `str.replace`, except that a dictionary of replacements can be specified. The replacements are done in a single-pass. This means that a previous replacement will not be replaced by a subsequent match. Parameters ---------- string: str The source string to have replacements done on it. rep_dict: dict The replacements were key is the input substring and value is the replacement Returns ------- replaced: str New string with the replacements done Examples -------- Basic example that also demonstrates the single-pass nature. If the replacements where chained, the result would have been 'lamb lamb' >>> multiple_replace('button mutton', {'but': 'mut', 'mutton': 'lamb'}) 'mutton lamb' """ pattern = re.compile( "|".join([re.escape(k) for k in sorted(rep_dict, key=len, reverse=True)]), flags=re.DOTALL ) return pattern.sub(lambda x: rep_dict[x.group(0)], string)