7

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

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

我怎么只能用这种方式替换?

4

1 回答 1

12

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)
于 2013-09-20T17:45:56.973 回答