re.sub如何一步完成?

时间:2018-11-13 13:25:04

标签: regex python-3.x

我尝试将这一步骤合而为一,但这没有用

w = re.sub('[0-9]', r'9', w)
w = re.sub('[A-Z]', r'X', w)
w = re.sub('[a-z]', r'x', w)

有人知道如何使用XXxxxx999-> Xx9之类的字符串来制作。

1 个答案:

答案 0 :(得分:2)

您可以使用回调方法作为替换参数,例如:

import re

rx = r'([0-9]+)|([A-Z]+)|[a-z]+'
w = "XXxxxx999"

def repl(m):
    if m.group(1):       # if ([0-9]) matched
        return '9'       # replace with 9
    elif m.group(2):     # if ([A-Z]) matched
        return 'X'       # replace with X
    else:                # if ([a-z]) matched
        return 'x'       # replace with x

print(re.sub(rx, repl, w)) # => Xx9

请参见Python demo

正则表达式匹配:

  • ([0-9]+)-第1组:1个以上数字
  • |-或
  • ([A-Z]+)-第2组:1个以上大写字母
  • |-或
  • [a-z]+-1个以上小写字母。