Gå til innhold

Anbefalte innlegg

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?

Lenke til kommentar
Videoannonse
Annonse
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.

Lenke til kommentar
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.

Lenke til kommentar

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:~$ 

Lenke til kommentar
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.

Lenke til kommentar

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!

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å
×
×
  • Opprett ny...