Найти строку с помощью регулярки
Имеется огромный 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 шт):
/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 |