2013-08-25 27 views
9

Bir sözcüğün ve son işaretlerinde noktalama işaretlerini kullanmak için normal ifadeleri kullanmam gerekir. Regex bunun için en iyi seçenek olacak gibi görünüyor. Noktalama işaretinin 'siz' gibi kelimelerden kaldırılmasını istemiyorum. Bu yüzden .replace() kullanmıyorum. Şimdiden teşekkür ederiz =)regex - python ile şerit noktalama işareti

+0

Python 3.x kullanırken, sadece normal ifadede W w ve \ \ kullanabilirsiniz: string.punctuation ile str.strip kullanın. Bu sadece bir Tkinter metin widget'ında Control-Shift-Left/Right işlevini (bir sözcükten önce noktalama işaretleri gibi tüm öğeleri atlamak için) kodlamadı. Bu çözümü bulmadan önce yazınızı buldum. Yani, benzer bir teknede birisine yardımcı olabileceğini düşünüyorum. – Shule

cevap

32

Bu görevi yapmak için normal ifadeye ihtiyacınız yok. Unicode alfanümerik karakterler ve her şey ayırt etmek bir yol arıyoruz buraya gelenler için

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

Sadece meraktan dolayı, bunun için regex yöntemi ne olurdu? –

+0

're.sub ('\ S +', lambda m: re.sub ('^ \ W + | \ W + $', '', m.group()), '...')'. NOT: Kesin olması için '\ W '' yi değiştirmeniz gerekir, çünkü '_' ifadesini hariç tutacaktır (eğer '_' bir noktalama karakteri olarak davranıyorsa). DEMO: http://ideone.com/Ti44Bw – falsetru

+0

Harika! Çok teşekkürler! Bu arada, bu sizinkiyle aynı - 're.sub (' \ S + ', lambda m: re.match (r'^\ W * (. * \ W) \ W * $ ', m.group ()). grup (1), metin) '? Evet ise, hangisi daha hızlı (ya da daha iyisi)? [Demo] (http://ideone.com/EDan4X) –