it-swarm.com.ru

Найти все между двумя тегами XML с RegEx

В RegEx я хочу найти тег и все, что находится между двумя XML tags, как показано ниже:

<primaryAddress>
    <addressLine>280 Flinders Mall</addressLine>
    <geoCodeGranularity>PROPERTY</geoCodeGranularity>
    <latitude>-19.261365</latitude>
    <longitude>146.815585</longitude>
    <postcode>4810</postcode>
    <state>QLD</state>
    <suburb>Townsville</suburb>
    <type>PHYSICAL</type>
</primaryAddress>

Я хочу найти тег и все, что находится между primaryAddress, и стереть это. 

Все, что находится между тегом primaryAddress, является переменной, но я хочу удалить весь тег и вложенные теги всякий раз, когда получаю primaryAddress.

У кого-нибудь есть идеи, как это сделать?

41
Doz

Не очень хорошая идея использовать регулярные выражения для разбора HTML/XML ...

Однако, если вы все равно хотите это сделать, найдите шаблон регулярных выражений 

<primaryAddress>[\s\S]*?<\/primaryAddress>

и заменить его пустой строкой ...

92
Ωmega

Вы должны быть в состоянии сопоставить его с: /<primaryAddress>(.+?)<\/primaryAddress>/

Содержимое между тегами будет в соответствующей группе.

15
doublesharp

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

(<!--((?!-->).)*-->|<\w*((?!\/<).)*\/>|<(?<tag>\w+)[^>]*>(?>[^<]|(?R))*<\/\k<tag>\s*>)

edit: как уже упоминалось в комментарии выше, regex всегда недостаточно для разбора xml, попытка изменить regex для соответствия большей ситуации только делает его длиннее, но все еще бесполезным

3
Valen

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

<primaryAddress.*>((.|\n)*?)<\/primaryAddress>

проверенный ответ возвращает теги, но это просто возвращает значение между тегами.

0
saman