Python lambda if语句re.sub

Python lambda if语句re.sub,python,regex,replace,lambda,Python,Regex,Replace,Lambda,因此,我使用以下正则表达式解析文本并从特定词典中获取信息: re.sub(r'(<Q\d+>)',lambda m: quotes[m.group(1)][1],text) re.sub(r'()',lambda m:quotes[m.group(1)][1],text) 我想做的是,只有当它将替换为单独字典中的键时,才将其替换。从逻辑上看,它是这样的: re.sub(r'(<Q\d+>)',lambda m: quotes[m.group(1)][1] if quo

因此,我使用以下正则表达式解析文本并从特定词典中获取信息:

re.sub(r'(<Q\d+>)',lambda m: quotes[m.group(1)][1],text)
re.sub(r'()',lambda m:quotes[m.group(1)][1],text)
我想做的是,只有当它将替换为单独字典中的键时,才将其替换。从逻辑上看,它是这样的:

re.sub(r'(<Q\d+>)',lambda m: quotes[m.group(1)][1] if quotes[m.group(1)][1] in d,text)
re.sub(r'()',lambda m:quotes[m.group(1)][1]如果在d中引用[m.group(1)][1],文本)
现在,如果我运行以下命令,我会得到以下语法错误:

>>> re.sub(r'(<Q\d+>)',lambda m: quotes[m.group(1)][1] if quotes[m.group(1)][1] in d,text)
  File "<stdin>", line 1
    re.sub(r'(<Q\d+>)',lambda m: quotes[m.group(1)][1] if quotes[m.group(1)][1] in d,text)
                                                                                    ^
SyntaxError: invalid syntax
>>re.sub(r'()',lambda m:quotes[m.group(1)][1]如果在d中引用[m.group(1)][1],文本)
文件“”,第1行
re.sub(r'()',lambda m:quotes[m.group(1)][1]如果d中的quotes[m.group(1)][1],文本)
^
SyntaxError:无效语法

我如何才能仅以这种方式替换?

if表达式始终需要
else
。您始终必须替换匹配的文本。如果不想替换它,只需将其替换为自身:

re.sub(r'(<Q\d+>)', 
  (lambda m: quotes[m.group(1)][1] if quotes[m.group(1)][1] in d else m.group(1)), text)
re.sub(r'()',
(lambda m:引用[m.group(1)][1]如果在d else m.group(1)中引用[m.group(1)][1],文本)

相同的语法错误…还有,为什么else语句会跟在分隔replace语句和文本的逗号后面?@RyanSaxe:对不起,我打错了,把
文本留在了错误的地方,请参阅更新版本。(您应该在逗号后面加空格!:-)包装lambda的括号是否必要?@RyanSaxe:这里不需要paren,因为对于解析器来说,逗号是在lambda主体内还是lambda是
re.sub
的逗号分隔参数并不含糊。但是,如果您不能立即清楚地看出它不是含糊不清的,那么您可能还是希望使用它们,因为代码必须对人类读者有意义,而不仅仅是对编译器。