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

后端 未结 4 1130
南笙
南笙 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条回答
  •  傲寒
    傲寒 (楼主)
    2021-02-09 09:20

    The easiest way I guess is to make use of functools.partial, which allows you create a "partially evaluated" function:

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

提交回复
热议问题