Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t使用'\1';在re.sub()repr表达式中的函数调用中对捕获组的反向引用_Python_Regex_Substitution_Backreference_Capture Group - Fatal编程技术网

Python Can';t使用'\1';在re.sub()repr表达式中的函数调用中对捕获组的反向引用

Python Can';t使用'\1';在re.sub()repr表达式中的函数调用中对捕获组的反向引用,python,regex,substitution,backreference,capture-group,Python,Regex,Substitution,Backreference,Capture Group,我有一个字符串S='02143'和一个列表a=['a','b','c','d','e']。我想用列表A中相应的元素替换“S”中的所有数字 例如,将0替换为A[0],2替换为A[2]等等。最终输出应该是S='acbed' 我试过: S = re.sub(r'([0-9])', A[int(r'\g<1>')], S) S=re.sub(r'([0-9]),A[int(r'\g')],S) 但是,这会给出一个错误ValueError:int()的无效文本,以10为基数:'\\g'。我

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

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

我试过:

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

但是,这会给出一个错误
ValueError:int()的无效文本,以10为基数:'\\g'
。我猜它正在考虑将backreference
'\g'
作为一个字符串。我如何解决这个问题,特别是使用
re.sub
和捕获组,或者其他方法?

之所以
re.sub(r'([0-9]),A[int(r'\g')],S
不起作用,是因为
\g
(这是第一个反向引用的明确表示,否则写为
\1
)反向引用仅在字符串替换模式中使用时有效。如果您将其传递给另一个方法,它将“看到”的只是
\g
文本字符串,因为
re
模块当时没有机会对其进行评估
re
引擎仅在匹配过程中对其进行求值,但是
a[int(r'\g')]
部分在
re
引擎尝试查找匹配之前进行求值

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

见:

re.sub(模式、应答、字符串、计数=0、标志=0)

如果
repl
是一个函数,则会为每个非重叠函数调用它 出现
模式
。该函数接受单个匹配对象 参数,并返回替换字符串

使用

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

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