Gå til innhold

Fastlåst med et regexp problem, litt hjelp


Anbefalte innlegg

Prøver å sette inn ${color white} ${color} på hver side av en dato i python. Mitt nåværende regex fungerer ikke dersom dagen er en mandag pga da er det ikke et mellomrom forran datoen. Om jeg fjerner mellomrommet forran datoen vil den feks ta 18 og 28 om dagens dato er 8, noe som er uønsket.

 

Forslag?

 

#!/usr/bin/python
import time, calendar, re, string
localtime = time.localtime(time.time())
i = localtime[1]
for i in range(i,i+1):
cal = calendar.month(localtime[0],i)
regex = calendar.month_name[localtime[1]]
replace = '${color}%s' % regex
#	cal = re.sub(regex,replace,cal) + '${color}'
if re.search(regex,cal):
	regexp = " %d " % localtime[2]
	replace = '${color white}%s${color}' % regexp
	cal = re.sub(regexp,replace,cal)
print cal

Lenke til kommentar
Videoannonse
Annonse

Dette skal fungere tror jeg:

#!/usr/bin/python
import time, calendar, re, string
localtime = time.localtime(time.time())
i = localtime[1]
for i in range(i,i+1):
       cal = calendar.month(localtime[0],i)
       regex = calendar.month_name[localtime[1]]
       replace = '${color}%s' % regex
#       cal = re.sub(regex,replace,cal) + '${color}'
       if re.search(regex,cal):
               regexp = "(\s)(%d)(\s)" % localtime[2]
               replace = r'\1${color white}\2${color}\3'
               cal = re.sub(regexp,replace,cal, 1)
       print cal

Lenke til kommentar

Forslag?

Du har fått et bra svar av FraXinuS, så jeg har bare et par kommentarer

 

#!
regex = calendar.month_name[localtime[1]]
replace = '${color}%s' % regex
#	cal = re.sub(regex,replace,cal) + '${color}'
if re.search(regex,cal):
	regexp = " %d " % localtime[2]
	replace = '${color white}%s${color}' % regexp
	cal = re.sub(regexp,replace,cal)
print cal

 


  •  
  • Det blir litt rart å ha en regexp verdi for search og så en annen regexp verdi for replace senere. I den første kan '10' gi treff på 2010, men du vil erstatte i '10' juli.
     
  • Du bør ikke bruke % da det sannsynligvis vil forsvinne i senere versjoner av Python (er det ikke gøy å programmere i et "moving target" språk?). Bruk heller format eller konkatenering (+)

 

En annen mulighet (egentlig ikke noe bedre i dette tilfellet) enn å bruke white space eksakt tall white space er ikke siffer eksakt tall ikke siffer:

 

regexp = "(\D)" + str(localtime[2]) + "(\D)"
replace=r'\1${color white}' + str(localtime[2]) + '${color}\\2'
if re.search(regexp,cal):
     newcal = re.sub(regexp,replace,cal)

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...