У вас есть дополнительный раздел, поэтому используйте ?
, чтобы сопоставить его, если он есть.Затем вы хотите исключить "
из ваших матчей, так как ваши цели окружены кавычками.Это облегчает для движка регулярных выражений совпадение с вашей строкой:
"([^"]*)"(?: -> "([^"]*)")?
Группировка (?:...)
не захватывает, ?
после того, как делает ее необязательной.
Когда выиспользуйте это с re.findall()
, вы всегда будете получать кортежи с двумя группами, вторая будет пустой для тех входов, где отсутствует -> "..."
:
>>> import re
>>> re.findall(r'"([^"]*)"(?: -> "([^"]*)")?', '"filename"')
[('filename', '')]
>>> re.findall(r'"([^"]*)"(?: -> "([^"]*)")?', '"link File" -> "filename"')
[('link File', 'filename')]
Я создал онлайндемонстрация с использованием Regex101 (которая по какой-то причине требует, чтобы мы явно экранировали двойные кавычки, а не то, что фактически требовал бы Python).В правой части под баннером «Объяснение» содержится разбивка рисунка.