Intereting Posts
Вертикальная полоса прокрутки появляется, даже когда высота не установлена Как предотвратить перескакивание страницы вверх при отображении или скрытии элементов с использованием параметра jQuery fade Как я могу разобрать JSON в html-таблицу с помощью PHP? Самый быстрый способ добавления содержимого HTML в div с использованием JavaScript Как вы определяете, на какой технологии построен веб-сайт? Как resize видео, когда видео запускается / останавливается? Задайте рейтинг по электронной почте Как правильно обработать событие «body» jquery, чтобы закрыть выпадающее меню Как отобразить фоновое изображение для слайдера цитаты? Есть ли новый стандарт для комментариев HTML? высота: 100% или минимальная высота: 100% для элементов html и body? Jquery слайд слева направо делает div прыгать на слайде Функция запуска после завершения одной функции – JQuery animate jQuery TABS не работает в новом проекте ASP.NET MVC4 Используя по сравнению с и CSS для полей формы, какова нынешняя принятая передовая практика для настольных компьютеров, мобильных устройств и доступности?

Regex против разметки после XPath?

Уже давно искали решение моей проблемы и некоторое время играли вокруг regex101.com, но не смогли найти решение.

Проблема, с которой я сталкиваюсь, заключается в том, что я должен сделать выбор строки для разных входов, поэтому я хотел сделать это с помощью регулярных выражений, чтобы получить нужные данные из этих строк. Регулярное выражение будет получено из конфигурации для каждой строки отдельно. (поскольку они отличаются)

Строка ниже получена с помощью XPath: //body/div/table/tbody/tr/td/p[5] но я больше не могу копать в этом, чтобы получить правильные данные, или я могу?

Строка, которую я сейчас использую в качестве примера, такова:

 Kontaktdaten des Absenders: 
Name: Wanted data
Telefon: XXXXXXXXX

Из этой строки я пытаюсь получить «Требуемые данные»,

До сих пор мое регулярное выражение выглядит следующим образом:

 (?<= )(.*)(?= 
)

Но это возвращает целое:

 
Name: Wanted data
Telefon: XXXXXXXXX

Я думал, что смогу решить это с помощью повторной группы

 ((:?(?<= )(.*)(?= 
))+)

Но это возвращает тот же результат, что и без повторной группы.

Я знаю, что я мог бы построить цикл {} вокруг этого регулярного выражения, чтобы получить тот же результат, но поскольку это единственное регулярное выражение, которое я должен сделать для (но это означает, что я должен изменить его для всех других данных), мне было интересно если это можно сделать в регулярном выражении.

Спасибо за поддержку уже до сих пор.

Regex – неправильный инструмент для parsingа разметки. У вас есть правильный инструмент анализа XML, XPath, в руке. Завершите работу:

Этот XPath,

 strong[.='Name:']/following-sibling::text()[1] 

при добавлении к исходному XPath,

 //body/div/table/tbody/tr/td/p[5]/strong[.='Name:']/following-sibling::text()[1] 

завершит работу по выбору текстового узла сразу же после Name: , если это запрошено, без необходимости использования дополнительных меток regex над разметкой.

Вы можете попробовать совместить все, кроме маркеров тегов:

 (?< =<\/strong> )([^<>]*)(?= 
)

демонстрация