Passing a function to re.sub in Python

后端 未结 3 956
囚心锁ツ
囚心锁ツ 2020-11-28 06:44

I have strings that contain a number somewhere in them and I\'m trying to replace this number with their word notation (ie. 3 -> three). I have a function that does this. Th

相关标签:
3条回答
  • 2020-11-28 07:22

    You should call group() to get the matching string:

    import re
    
    number_mapping = {'1': 'one',
                      '2': 'two',
                      '3': 'three'}
    s = "1 testing 2 3"
    
    print re.sub(r'\d', lambda x: number_mapping[x.group()], s)
    

    prints:

    one testing two three
    
    0 讨论(0)
  • 2020-11-28 07:26

    A solution without lambda

    import re
    
    def convert_func(matchobj):
        m =  matchobj.group(0)
        map = {'7': 'seven',
               '8': 'eight',
               '9': 'nine'}
        return map[m]
    
    line = "7 ate 9"
    new_line =  re.sub("[7-9]", convert_func, line)
    
    0 讨论(0)
  • 2020-11-28 07:43

    To make your function fit with re.sub, you can wrap it with a lambda:

    re.sub('pattern', lambda m: myfunction(m.group()), 'text')
    
    0 讨论(0)
提交回复
热议问题