Регулярное выражение — начинается и заканчивается на, и содержит определенную строку в середине

#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, чтобы убедиться, что он будет соответствовать только в том случае, если теги правильные, но для дальнейшего кодирования будет соответствовать только содержимому.