Найти строку с помощью регулярки

Имеется огромный dll файл, где есть вот такая строка:

<product name="Veeam Backup and Replication 11.0" marketname="P20210401" upgradable="9.5.4.2866" preview="false" xmlns="http://tempuri.org/ProductReleases.xsd">

Мне нужно вытащить оттуда значение marketname: "P20210401", где product name - Veeam Backup and Replication, но он может быть и пустой: marketname="", в таком случае и пустоту нужно забрать.

Помогите составить регулярку.


Ответы (1 шт):

Автор решения: DiMithras

/marketname=("[^"]+"|"")/
В группе | (либо) ищет всё что в кавычках либо сами кавычки

Группа Позиция Содержимое
Match1 50-72 marketname="P20210401"
Group1 61-72 "P20210401"
Match1 211-224 marketname=""
Group1 222-224 ""

Update

См. комментарии.

Можно сократить регулярное выражение:
/marketname=("[^"]*")/
Квантификатор + — один и более символов
квантификатор * — ноль и более символов

Update 2

(?<=name="Veeam Backup and Replication 11.0" marketname=")([^"]*)(?=")
Здесь использую positive lookahead и lookbehind. Это значит, что мы возьмём значение только если до него есть name="Veeam Backup and Replication 11.0" , а после ".
Сам Veeam Backup можно передать как переменную в коде, если имена будут использоваться в цикле.

pattern = r'(?<=name="' + name + r'" marketname=")([^"]*)(?=")'
Группа Позиция Содержимое
Match1 62-71 P20210401
Group1 62-71 P20210401
Match1 223-223 null
Group1 223-223 null
→ Ссылка