How to pass a variable to a re.sub callback?

后端 未结 4 1137
南笙
南笙 2021-02-09 08:29

I am using a re.sub callback to replace substrings with random values, but I would like the random values to be the same across different strings. Since the re.sub callback does

4条回答
  •  -上瘾入骨i
    2021-02-09 09:16

    The variant I would recommend:

    mappings = {'A': 1, 'B': 2}  # Or whatever ...
    def evaluate(match):
        return str(eval(match.group(0)[2:-1], mappings))
    newstring = sub(r'\#\{([^#]+)\}', evaluate, string)
    

    i.e. simply put the def evaluate(..) just before the sub(), as a local function.

提交回复
热议问题