2013-09-20 2 views
4

Так я использую следующее регулярное выражение для разбора текста и захватить информацию из определенного словаря:Python лямбда, если оператор re.sub

re.sub(r'(<Q\d+>)',lambda m: quotes[m.group(1)][1],text) 

То, что я хочу сделать, это только его заменить, если что будет replace with - это ключ в отдельном словаре. Логически это будет выглядеть следующим образом:

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 

Как я могу заменить только на этом пути?

ответ

9

Выражение 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) 
+0

же ошибка синтаксиса ... и почему бы заявление еще идти после запятой, что отделяет заменить заявление от текста? –

+0

@ RyanSaxe: Извините, я сделал опечатку и оставил «текст» в другом месте, см. Обновленную версию. (Вы должны поместить пробелы после запятых! :-) – BrenBarn

+0

, если вы переместите другое перед запятой, это сработает! спасибо –