Найти / заменить два html-тега регулярным выражением - PullRequest
2 голосов
/ 08 ноября 2019

Я хочу захватить содержимое двух HTML-тегов с помощью регулярных выражений. Для фактического разбора HTML я бы использовал что-то другое, но я работаю в поиске / замене из текстового редактора, поэтому у меня есть только регулярное выражение в качестве опции для этой конкретной задачи. Текст:

<meta property="og:type" content= "website"/>
<meta content= "something" property="og:new" />
...and several more below...

У меня есть следующее, чтобы захватить первое, но это становится сложным при чередовании в порядке тегов:

meta\s(property=")(?P<prop>[^"]+)"\s(content= ")(?P<value>[^"]+)"\/>|

Как я могу сделатьвыше с регулярным выражением?

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Это работа для Lookahead :

<meta\s(?=.*?property\s*=\s*"([^"]+))(?=.*?content\s*=\s*"([^"]+)).+/>

Объяснение:

<meta\s             # openning tag followed by a space
(?=                 # start lookahead, zero-length assertion that checks we have after:
    .*?                 # 0 or more any character, not greedy
    property            # literally
    \s*=\s*             # equal sign surround by optional spaces
    "                   # double quote
    ([^"]+)             # group 1, 1 or more non quote
)                   # end lookahead
(?=                 # start lookahead, zero-length assertion that checks we have after:
    .*?                 # 0 or more any character, not greedy
    content             # literally
    \s*=\s*             # equal sign surround by optional spaces
    "                   # double quote
    ([^"]+)             # group 2, 1 or more non quote
)                   # end lookahead
.+/>                # 1 or more any character end closing tag

Демонстрация и объяснение

0 голосов
/ 08 ноября 2019

Было бы намного проще сделать это с двумя выражениями:

<meta\s(property=")([^"]+)"\s+(content=")([^"]+)"\s*\/>

Демо 1

<meta\s(content=")([^"]+)"\s+(property=")([^"]+)"\s*\/>

Демо 2

и вы можете заменить на что угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...