#regex
#регулярное выражение
Вопрос:
Я хотел бы сгенерировать регулярное выражение со следующим условием:
Строка «СОБЫТИЕ» содержится в xml-теге под названием «SHEM-HAKOVETZ».
Например, следующая строка должна соответствовать:
<SHEM-HAKOVETZ>104000514813450EVENTS0001dfd0.DAT</SHEM-HAKOVETZ>
Комментарии:
1.
(?<=<SHEM-HAKOVETZ>).*(?=</SHEM-HAKOVETZ>)
Ответ №1:
Я думаю, вы хотите что-то вроде этого ^<SHEM-HAKOVETZ>.*EVENT.*</SHEM-HAKOVETZ>$
Ответ №2:
Регулярное выражение
^<SHEM-HAKOVETZ>.*EVENTS.*</SHEM-HAKOVETZ>$
Части регулярного выражения
^
С начала строки
<SHEM-HAKOVETZ>
Начальный тег
.*
Любой символ — ноль или более
EVENT
Средняя часть
</SHEM-HAKOVETZ>$
Завершающая часть соответствия
Вот рабочее регулярное выражение.
Ответ №3:
Если вы хотите сопоставить эту строку, вы могли бы использовать это регулярное выражение:
<SHEM-HAKOVETZ>*EVENTS.*(?=</SHEM-HAKOVETZ>)
Однако я бы не рекомендовал использовать данные на основе регулярных выражений на основе XML, поскольку могут возникнуть проблемы с обработкой пробелов в XML (см. Эту статью для получения дополнительной информации). Я бы предложил использовать настоящий анализатор XML (и затем применить reg, чтобы быть уверенным в ваших результатах.
Ответ №4:
Вот решение, позволяющее сопоставлять только часть «значение», игнорируя XML-теги:
(?<=<SHEM-HAKOVETZ>)(?:.*EVENTS.*)(?=</SHEM-HAKOVETZ>)
Вы можете проверить это в действии по адресу:https://regex101.com/r/4XiRch/1
Он работает с Lookbehind и Lookahead, чтобы убедиться, что он будет соответствовать только в том случае, если теги правильные, но для дальнейшего кодирования будет соответствовать только содержимому.