Deci am un fișier html care conține următoarele undeva la mijloc:
<span dir="ltr">http:(...).com</span>
Încerc să extrag adresa URL, dar întâmpin unele probleme în a face acest lucru. Deoarece acel „ltr” este singurul care există în html, am venit cu acest regex:
(?<=ltr">)(.*)(?=<\/span>)
Folosind regex101 am confirmat că expresia regex funcționează. Cu toate acestea, din cauza modului în care ansible se ocupă de ghilimele și ghilimele duble, cred că poate cauza unele probleme.
Incerc asa:
- set_fact:
regex_test: " {{ htmlres.content | regex_search('(?<=ltr">)(.*)(?=<\/span>)') }}"
Unde htmlres.content este conținutul html primit de la o solicitare http get făcută anterior în același manual.
Cu toate acestea, rulați-l:
- set_fact:
regex_pubdest: " {{ htmlres.content | regex_search('(?<=ltr">)(.*)(?=<\/span>)' }}"
^ aici
Există vreo modalitate de a ocoli această problemă cu ghilimele în regex în ansible? Am reușit să obțin rezultatul dorit făcând ceva ușor diferit, care este următorul:
shell: grep -oP 'ltr">\K.*?(?=</span>)' /dir/htmlcontent.txt
Problema este că anterioară funcționează numai atunci când citesc dintr-un fișier și încerc să evit să salvez conținutul html. într-un fișier înainte de a trece un regex prin el. Am încercat să înlocuiesc calea către folderul din grep cu „{{html.content}}”, dar, din păcate, asta face ca ansible să nu ruleze corect din cauza ghilimelelor.
Vreo idee?
Mulțumesc!