2013-08-25 14 views
9

Devo usare regex per rimuovere la punteggiatura allo start e fine di una parola. Sembra che regex sia l'opzione migliore per questo. Non voglio la punteggiatura rimossa da parole come "tu sei", ed è per questo che non sto usando .replace(). Grazie in anticipo =)punteggiatura di strip con regex - python

+0

Per chi viene qui in cerca di un modo per distinguere tra caratteri alfanumerici Unicode e tutto il resto, durante l'utilizzo di Python 3.x, si può semplicemente utilizzare \ w \ W nella vostra espressione regolare. Questo mi ha aiutato a codificare la funzionalità Control-Shift-Left/Right in un widget di testo Tkinter (per ignorare tutte le cose come la punteggiatura prima di una parola). Ho trovato il tuo post prima di trovare questa soluzione. Quindi, immagino che possa aiutare qualcuno in una barca simile. – Shule

risposta

32

Non è necessaria un'espressione regolare per eseguire questa operazione. Utilizzare str.strip con string.punctuation:

>>> import string 
>>> string.punctuation 
'!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~' 
>>> '!Hello.'.strip(string.punctuation) 
'Hello' 

>>> ' '.join(word.strip(string.punctuation) for word in "Hello, world. I'm a boy, you're a girl.".split()) 
"Hello world I'm a boy you're a girl" 
+1

Solo per curiosità, quale sarebbe il metodo regex per questo? –

+0

're.sub ('\ S +', lambda m: re.sub ('^ \ W + | \ W + $', '', m.gruppo()), '...')'. NOTA: è necessario sostituire '\ W' per essere precisi perché esclude' _' (se si tratti '_' come carattere di punteggiatura). DEMO: http://ideone.com/Ti44Bw – falsetru

+0

Grande! Molte grazie! A proposito, è equivalente al tuo - 're.sub ('\ S +', lambda m: re.match (r '^ \ W * (. * \ W) \ W * $', m.group ()). gruppo (1), testo) '? Se sì, quale di questi è più veloce (o comunque migliore)? [Demo] (http://ideone.com/EDan4X) –