Итак, у меня есть html-файл, который содержит следующее где-то посередине:
<span dir="ltr">http:(...).com</span>
Я пытаюсь извлечь URL-адрес, но у меня возникают некоторые проблемы с этим. Поскольку этот «ltr» — единственный, который существует в html, я придумал это регулярное выражение:
(?<=ltr">)(.*)(?=<\/span>)
Используя regex101, я подтвердил, что регулярное выражение работает. Однако из-за того, как ansible работает с кавычками и двойными кавычками, я думаю, что это может вызвать некоторые проблемы.
Я пытаюсь это сделать так:
- set_fact:
regex_test: " {{ htmlres.content | regex_search('(?<=ltr">)(.*)(?=<\/span>)') }}"
Где htmlres.content — это html-контент, полученный из HTTP-запроса на получение, выполненного ранее в той же книге воспроизведения.
Тем не менее, запустив его:
- set_fact:
regex_pubdest: " {{ htmlres.content | regex_search('(?<=ltr">)(.*)(?=<\/span>)' }}"
^ здесь
Есть ли способ обойти эту проблему с помощью кавычек в регулярных выражениях? Мне удалось добиться желаемого результата, сделав что-то немного другое, а именно:
оболочка: grep -oP 'ltr">\K.*?(?=</span>)' /dir/htmlcontent.txt
Проблема в том, что предыдущая работает только при чтении из файла, и я пытаюсь избежать сохранения html.content в файл перед передачей через него регулярного выражения. Я попытался заменить путь к папке в grep на «{{html.content}}», но, к сожалению, это приводит к неправильной работе ansible из-за кавычек.
Любые идеи?
Спасибо!