gpt4 book ai didi

python - 无法在 re.sub() repr 表达式的函数调用中使用 '\1' 反向引用捕获组

转载 作者:行者123 更新时间:2023-12-01 02:11:01 28 4
gpt4 key购买 nike

我有一个字符串S = '02143'和一个列表A = ['a','b','c','d','e'] 。我想将“S”中的所有数字替换为列表 A 中相应的元素.

例如,替换 0A[0] , 2A[2]等等。最终输出应该是 S = 'acbed'

我尝试过:

S = re.sub(r'([0-9])', A[int(r'\g<1>')], S)

但是这会产生错误 ValueError: invalid literal for int() with base 10: '\\g<1>' 。我猜它正在考虑反向引用 '\g<1>'作为字符串。我该如何解决这个问题,特别是使用 re.sub和捕获组,还有其他选择吗?

最佳答案

原因re.sub(r'([0-9])',A[int(r'\g<1>')],S)不起作用的是\g<1> (这是第一个反向引用的明确表示,否则写为 \1 )反向引用仅在字符串替换模式中使用时才有效。如果你将它传递给另一个方法,它只会“看到” \g<1>文字字符串,自 re那时模块将没有任何机会对其进行评估。 re引擎仅在比赛期间对其进行评估,但 A[int(r'\g<1>')]部分在 re 之前评估引擎尝试查找匹配项。

这就是为什么可以在 re.sub 中使用回调方法作为替换参数:您可以将匹配的组值传递给任何外部方法以进行高级操作。

请参阅 re documentation :

re.sub(pattern, repl, string, count=0, flags=0)

If repl is a function, it is called for every non-overlappingoccurrence of pattern. The function takes a single match objectargument, and returns the replacement string.

使用

import re
S = '02143'
A = ['a','b','c','d','e']
print(re.sub(r'[0-9]',lambda x: A[int(x.group())],S))

请参阅Python demo

请注意,您不需要使用括号捕获整个模式,您可以使用 x.group() 访问整个匹配。 .

关于python - 无法在 re.sub() repr 表达式的函数调用中使用 '\1' 反向引用捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48697161/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com