【问题标题】:Python lambda if statement re.subPython lambda if 语句 re.sub
【发布时间】:2023-04-07 00:54:01
【问题描述】:

所以我使用以下正则表达式来解析文本并从特定字典中获取信息:

re.sub(r'(<Q\d+>)',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'(<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

怎么只能这样替换?

【问题讨论】:

    标签: python regex replace lambda


    【解决方案1】:

    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)
    

    【讨论】:

    • 相同的语法错误...还有为什么 else 语句要放在分隔替换语句与文本的逗号之后?
    • @RyanSaxe:对不起,我打错了,把text 放在了错误的地方,请看更新的版本。 (你应该在逗号后面加空格!:-)
    • 是否需要用括号包裹 lambda?
    • @RyanSaxe:这里不需要括号,因为对于解析器来说,逗号是在 lambda 主体内还是 lambda 是 re.sub 的逗号分隔参数,这并不模棱两可。但是,如果对来说不是很明显它不是模棱两可的,那么您可能还是想使用它们,因为代码必须对人类读者有意义,而不仅仅是对编译器。
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多