Axxxy Skrevet 15. januar 2014 Del Skrevet 15. januar 2014 Leter gjennom en liten tekst der jeg vil ha tak i en link omringet av hermetegn("), mens i noen tilfeller er den omringet av apostrof('). Hvordan kan jeg se etter begge tilfellene i samme søk? Her er koden jeg har så langt: line = re.search('<a href="(.+?)"', chunk) if line: print line.group(1) I dette tilfellet er (.+?) omringet av hermetegn. Leste man kunne bruke or(|) tegnet til å spesifisere flere alternativer, men vet ikke hva jeg gjør feil. Her er koden som ikke fungerer, men viser ønsket resultat: line = re.search("""<a href=("|')(.+?)('|")""", chunk) if line: print line.group(1) I følge python doc, så skal man kunne sjekke etter både " og ' ved å skrive ("|'), men noe er tydligvis feil. Takk for all hjelp. -Daniel Lenke til kommentar
slacky Skrevet 15. januar 2014 Del Skrevet 15. januar 2014 (endret) .... line = re.search("""<a href=("|')(.+?)('|")""", chunk) if line: print line.group(1) I følge python doc, så skal man kunne sjekke etter både " og ' ved å skrive ("|'), men noe er tydligvis feil. Ser nermest korrekt ut.. ville ha gjort det litt anderledes, putte "or"-statement ("|") inni "firkant-parantes", og backslashet hermetegnet (fungerer også med re.search): import re if __name__ == '__main__': ptrn = re.compile( r"<a href=[\"|'](.+?)['|\"]" ) chunk = '<a href=\"www.blabla.com\"> bla bla.. </a>' + \ '<a href=\'http://www.lala.com\'> la la.. </a>' groups = re.findall(ptrn, chunk) print groups Endret 15. januar 2014 av warpie Lenke til kommentar
snippsat Skrevet 15. januar 2014 Del Skrevet 15. januar 2014 (endret) Html og regex er ikke beste venner som tatt opp her Det går som regel og knote til til noe i regex med html,men ofte gjøre en parser dette mye enklere. Parser for Python BeautifulSoup og lxml,begge er veldig gode og viktig begge kan lese ukorrekt html. Et par eksempler på og ta ut linker(a = href) from bs4 import BeautifulSoup html = '''\ <a href=\"www.blabla.com\"> bla bla.. </a> <a href=\'http://www.lala.com\'> la la.. </a>''' soup = BeautifulSoup(html) links = soup.findAll('a') for link in links: print link['href'] lxml er kraftig og man kan bruke Xpath ('//a/@href') eller CSS select for og ta ut linker. from lxml.html import parse tag = parse('http://www.google.com/').getroot() links = tag.cssselect('a') Endret 15. januar 2014 av snippsat Lenke til kommentar
Axxxy Skrevet 15. januar 2014 Forfatter Del Skrevet 15. januar 2014 (endret) Tusen takk for svar fra begge! Warpie: Dette var akuratt det jeg lette etter og det fungerte som det skulle. Takk for hjelpen. Snippsat: lxml og beautifulsoup har jeg ikke tatt meg tid til å sette meg inn i enda, så bruker regex nå. Skal fokusere på å forbedre koden etter hvert med en av dem. Takk for eksemplene. -Daniel Endret 15. januar 2014 av Axxxy Lenke til kommentar
zotbar1234 Skrevet 22. januar 2014 Del Skrevet 22. januar 2014 Snippsat: lxml og beautifulsoup har jeg ikke tatt meg tid til å sette meg inn i enda, så bruker regex nå. Ikke bruk regex til HTML-håndtering. Selv kun stykkvis. Det leder til veldig mye smerte og kun halvferdige løsninger. Lenke til kommentar
Rasjonelt Skrevet 11. mars 2014 Del Skrevet 11. mars 2014 Et vanlig mønster for å finne noe mellom to markørtegn er å først finne starttegnet, så alt annet enn endetegnet og så endetegnet. I tilfellet anførselstegn blir det da: '"([^"]*)"' Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå