meastp Skrevet 18. januar 2007 Skrevet 18. januar 2007 Hei! Jeg får ikke til substitute med re / regex. med denne, altså uten substitution: print re.compile(r'Production Code: (\d\d\d)').search('First aired: 3/27/2005 Production Code: 101').group() får jeg Production Code: 101 men jeg vil ha 101. Noen?
zeitgeist Skrevet 18. januar 2007 Skrevet 18. januar 2007 prøv med .groups()[0] i stedet. Tror ellers du bør finne en annen regex-løsning, eller helst en ikke-regex-løsning. F.eks med txt.split('Code: ').
meastp Skrevet 19. januar 2007 Forfatter Skrevet 19. januar 2007 Ok, men kan du si noen ord om hvorfor, så jeg lærer noe? Hvorfor er txt.split() en bedre metode enn regex?
zeitgeist Skrevet 20. januar 2007 Skrevet 20. januar 2007 Ok, men kan du si noen ord om hvorfor, så jeg lærer noe? Hvorfor er txt.split() en bedre metode enn regex? 7759710[/snapback] Regex er tregt og plundrete å vedlikeholde. Men av og til er det desidert beste løsning. Jeg vet ikke hva slags data du skal kværne, men hvis det er enkle atskilte strenger som under, er enkle strengmetoder raskere, enklere og mer "readable" txt = 'First aired: 3/27/2005 Production Code: 101' code = txt.split('Code: ')[1] En ting du i hvert fall bør unngå hvis du bruker regex er å bruke compile() for hver search/match du gjør. Hvis du skal søke en gang, ikke bruk compile() i det hele tatt. Skal du søke mange ganger, bruk compile() én gang for å speede opp søket.
meastp Skrevet 21. januar 2007 Forfatter Skrevet 21. januar 2007 (endret) Er det mulig å få [1] innenfor parentesene på noen måte? Jeg har nemlig problemer med en løkke når den står etterpå. Endret 21. januar 2007 av meastp
zeitgeist Skrevet 21. januar 2007 Skrevet 21. januar 2007 Er det mulig å få [1] innenfor parentesene på noen måte?Jeg har nemlig problemer med en løkke når den står etterpå. 7770614[/snapback] Nei, txt.split('Code: ') returnerer en liste, og ved å sette [1] på slutten, sier du at du kun vil ha det andre elementet i listen. Skal ikke føre til problemer. Dette er identisk med å si: txt = 'First aired: 3/27/2005 Production Code: 101' elements = txt.split('Code: ') code = elements[1] # eller code = elements[-1] # dvs, det siste elementet i listen. Du kan ev. poste løkka, så kanskje vi løser problemet.
meastp Skrevet 22. januar 2007 Forfatter Skrevet 22. januar 2007 Hei! Jeg poster løkka, jeg: i = 0 listeprodnr = [ 'zero' ] while i < len(data): txt = strip_ml_tags(str(data[i])) txt2 = txt.split('Code: ')[1] listeprodnr.append(txt2) i += 1 Gir meg Traceback (most recent call last): File "tvcom.py", line 79, in ? net.getProdnrSent() File "tvcom.py", line 61, in getProdnrSent txt2 = txt.split('Code: ')[1] IndexError: list index out of range meastp@meastp-laptop:~$
zeitgeist Skrevet 22. januar 2007 Skrevet 22. januar 2007 Hei! Jeg poster løkka, jeg: i = 0 listeprodnr = [ 'zero' ] while i < len(data): txt = strip_ml_tags(str(data[i])) txt2 = txt.split('Code: ')[1] listeprodnr.append(txt2) i += 1 Gir meg Traceback (most recent call last): File "tvcom.py", line 79, in ? net.getProdnrSent() File "tvcom.py", line 61, in getProdnrSent txt2 = txt.split('Code: ')[1] IndexError: list index out of range meastp@meastp-laptop:~$ 7776071[/snapback] Du får IndexError fordi lista ikke har mer enn et element og [1] adresserer element to. Det kommer nok av at "Code: " ikke finnes i strengen txt. En hotfix kan være å legge inn en enkel sjekk: i = 0 listeprodnr = [ 'zero' ] while i < len(data): txt = strip_ml_tags(str(data[i])) [COLOR=green]if "Code: " in txt:[/COLOR] txt2 = txt.split('Code: ')[1] listeprodnr.append(txt2) i += 1 ... eller noe slikt.
meastp Skrevet 23. januar 2007 Forfatter Skrevet 23. januar 2007 Det ble sånn: i = 0 listeprodnr = [ 'zero' ] while i < len(data): txt = strip_ml_tags(str(data[i])) if "Code: " in txt: txt2 = txt.split('Code: ')[1] # sortere ut production code (f.eks 101) listeprodnr.append(txt2) else : listeprodnr.append('Special') i += 1 Jeg fant nemlig ut at noen av strengene ikke hadde "Code: ", som du sa, fordi det er spesialepisoder og da har de ikke den koden. Det fant jeg ut ved å sette [-1]. Takk for hjelpen, så langt!
meastp Skrevet 25. januar 2007 Forfatter Skrevet 25. januar 2007 Hei! Et nytt spm: Hvordan kan jeg sette tallet til å ha to sifre - uansett? eks. S1 -> S01 S11 -> S11
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å