Python Regex Sub:使用带有正则表达式的字典

问题描述 投票:0回答:1

我正在使用包含正则表达式的字典来替换不同字符串的部分,正如@roippi在a previous SO question中所描述的那样优雅。第一个're.sub'表达式完美运行。但是,每当我的代码实际涉及正则表达式(第二个're.sub'表达式)时,替换都不起作用。

我很困惑为什么会这样。我试过使用和取出'r'以及结合前瞻/后瞻表达,似乎没有任何效果。任何帮助将不胜感激!

test_dict = {r'(\d+)': 'THIS IS A NUMBER', 'john_doe':'THIS IS A NAME'}

re.sub('(john_doe)', lambda x: test_dict.get(x.group(1),x.group(1)),'john_doe_jr')

re.sub(r'(\d+)', lambda x: test_dict.get(x.group(1), x.group(1)), '999la')
regex python-3.x dictionary substitution
1个回答
1
投票

match.group(n)不返回用于匹配第n组的正则表达式,而是返回第n组本身。

因此lambda返回test_dict.get('999', '999'),返回'999',因为'999'不是你字典中的键。

您可以迭代字典的键并检查是否有任何键与您的捕获组匹配,然后替换它,但是它具有O(n)时间复杂度(在字典的大小中)。

def replacement(match, d, group=1):
    for key in d:
        if re.match(key, match.group(group)):
            return d[key]
    return match.group(group)

re.sub(r'(\d+)', lambda x: replacement(x, test_dict), '999la')
© www.soinside.com 2019 - 2024. All rights reserved.