Gå til innhold

Regulære uttrykk - trenger tips


Anbefalte innlegg

Hei,

 

Forsøker å lære meg dette i forbindelse med en jobb. Sitter nå med teksten

(.....masse tekst....)
start_art-relaterte_ STRENG1 end_art-relaterte_ (30.05.05)
start_art-relaterte_ STRENG2 end_art-relaterte_ (31.05.05)
start_art-relaterte_ STRENG3 end_art-relaterte_ (01.06.05)
(.....masse tekst.....)

hvor STRENG1, 2, 3 osv er variable (både i lengde og innhold) tekststrenger. Det er et ukjent antall slike linjer, så planen er å finne en og en.

 

Mitt foreløpige forsøk er slik

start_art-relaterte_\W+[A-Z0-9\W\s]+\W+end_art-relaterte_\W+(\W+\d+)+

men det funker altså ikke.

 

Det er så vidt jeg vet snakk om en variant av Pythons regulære uttrykk.

 

Noen som har et tips eller to? Er helt fersk i dette.

Lenke til kommentar
Videoannonse
Annonse

En ganske rett fram og grei metode vil vel være noe slikt:

^start_art-relaterte_\s\w+\send_art-relaterte_ \(\d+.\d+.\d+\)$

Dersom du er avhengig av mer robust matching må det nok gjøres litt endringer, men det bør fungere dersom linjene alltid er på den formen du har gitt.

 

(Denne er basert på perl reg exp. Vet ikke om det er noen forskjell i Python)

Endret av Vice
Lenke til kommentar
start_art-relaterte_\W+[A-Z0-9\W\s]+\W+end_art-relaterte_\W+(\W+\d+)+

Jeg tror du gjør det litt vanskelig. Ser ikke helt hva du trenger \W og den klammeparantesen til.

 

 

^start_art-relaterte_ (.+) end_art-relaterte_ \(\d\d\.\d\d\.\d\d\)$

Dette burde vel gjøre nytten, sett at du skal hente ut STRENG og datoen. Vet ikke helt om det passer helt til pythons regex, men du forstår vel kanskje meningen og finner ut av det med pythons dokumentasjon.

 

Parantesene er for å kunne referere til disse områdene etterpå. Jeg tror at paranteser pleier å måtte escapes (skrives med backslash foran) for å matche i teksten.

 

Denne koden baserer seg på at regexen kjører hver linje for seg, eller at punktum (matcher alt) ikke matcher linjeskift, noe jeg tror er standard de fleste steder. Dersom STRENG skal inneholde linjeskift blir det hele litt vanskeligere, men å kjøre den første parantesen som non-greedy, altså (.*?), fikser det.

 

Dersom innholdet i STRENG kan matche "end_art-relaterte_ \(\d\d\.\d\d\.\d\d\)$", må du finne på noe med escaping. :p

Lenke til kommentar

Hei, takk for svar.

Jeg endte opp med denne

start_art-relaterte_[A-Z0-9\w\W\s]+end_art-relaterte_\W+(\W+\d+)+

Men nå som jeg ser forslagene deres, innser jeg at jeg kanskje hadde litt smør på flesket der, ja :) Takk igjen.

Endret av Edorph
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...