使用字符替换更正 UID 字符串以匹配给定模式

问题描述 投票:0回答:1
    uid = "lz09ll"
    pattern = r"^[a-zA-Z]{2}[0-9]{4}$"
    corrected_uid = correct_uid(uid, pattern)
    print("Corrected UID:", corrected_uid)  # Expected Output: "lz0911"

给定一个 UID 字符串和一个正则表达式模式,我想根据正则表达式检查 UID 中的每个位置。如果 UID 中的某个位置应该是数字(根据正则表达式),但有一个字母,我想根据字符映射字典用正确的数字替换该字母。同样,如果需要一个字母但有一个数字,我想替换它。

我有一个字典 char_to_digit 和 digital_to_char,根据位置和正则表达式进行交换

我尝试根据模式迭代 uid 中的每个字符,检查不匹配并应用替换,但逻辑无法正确处理位置,有时会由于不匹配而导致 None 。

python-3.x
1个回答
0
投票

我想这就是你想要的:

import re

uid = "lz09ll"
char_to_digit = {
    'a': 9,
    'l': 1,
}
digit_to_char = {
    '1': 'a',
    '2': 'b',
}
def change(mo):
    result = ''
    for i in range(1, len(mo.groups()) + 1):
        if i < 2 and mo[i].isdigit():
            result += str(digit_to_char.get(mo[i], mo[i]))
        elif i >= 2 and mo[i].isalpha():
            result += str(char_to_digit.get(mo[i], mo[i]))
        else:
            result += mo[i]
    return result

print("Corrected UID:", re.sub(r'^(.)(.)(.)(.)(.)(.)$', change, uid))  # Expected Output: "lz0911"
© www.soinside.com 2019 - 2024. All rights reserved.