Vì vậy, tôi có một tệp html chứa phần sau ở đâu đó ở giữa:
<span dir="ltr">http:(...).com</span>
Tôi đang cố trích xuất url nhưng tôi gặp một số vấn đề khi thực hiện. Bởi vì "ltr" đó là cái duy nhất tồn tại trong html, nên tôi đã nghĩ ra biểu thức chính này:
(?<=ltr">)(.*)(?=<\/span>)
Sử dụng regex101 tôi đã xác nhận rằng biểu thức regex hoạt động. Tuy nhiên, do cách ansible xử lý các trích dẫn và trích dẫn kép, tôi nghĩ rằng nó có thể gây ra một số vấn đề.
Tôi đang thử nó như thế này:
- bộ_thực tế:
regex_test: " {{ htmlres.content | regex_search('(?<=ltr">)(.*)(?=<\/span>)') }}"
Trong đó htmlres.content là nội dung html nhận được từ một yêu cầu http get được thực hiện trước đó trong cùng một playbook.
Tuy nhiên, chạy nó:
- bộ_thực tế:
regex_pubdest: " {{ htmlres.content | regex_search('(?<=ltr">)(.*)(?=<\/span>)' }}"
^ ở đây
Có cách nào để khắc phục vấn đề này với các trích dẫn trong biểu thức chính quy trong ansible không? Tôi đã quản lý để đạt được đầu ra mong muốn bằng cách thực hiện điều gì đó hơi khác một chút, đó là:
vỏ: grep -oP 'ltr">\K.*?(?=</span>)' /dir/htmlcontent.txt
Vấn đề là phần trước chỉ hoạt động khi đọc từ tệp và tôi đang cố gắng tránh lưu html.content vào tệp trước khi chuyển biểu thức chính quy qua tệp. Tôi đã thử thay thế đường dẫn đến thư mục trong grep bằng "{{html.content}}", nhưng rất tiếc, điều đó khiến ansible không chạy chính xác do dấu ngoặc kép.
Bất kỳ ý tưởng?
Cảm ơn bạn!