2013-08-25 16 views
9

trzeba użyć regex do strip interpunkcji na rozpocząć i koniec słowa. Wygląda na to, że najlepszym rozwiązaniem będzie regex. Nie chcę, aby interpunkcja była usuwana ze słów takich jak "jesteś", dlatego nie używam .replace(). Z góry dziękuję =)strip interpunkcji z regex - pyton

+0

Dla tych, którzy przyjeżdżają tu w poszukiwaniu sposobu na odróżnienie Unicode znaków alfanumerycznych i wszystkiego innego, podczas korzystania z Pythona 3.x, można po prostu użyć \ w i \ W w wyrażeniu regularnym. Pomogło mi to zakodować funkcjonalność Control-Shift-Left/Right w widgecie tekstowym Tkinter (aby pominąć wszystkie rzeczy, takie jak interpunkcja przed słowem). Znalazłem twoją pocztę, zanim znalazłem to rozwiązanie. Tak więc, myślę, że to może pomóc komuś w podobnej łodzi. – Shule

Odpowiedz

32

Do wykonania tego zadania nie potrzebujesz wyrażenia regularnego. Użyj str.strip z 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

Po prostu z ciekawości, jaka byłaby w tym celu metoda wyrażeń regularnych? –

+0

're.sub ('\ S +', lambda m: re.sub ('^ \ W + | \ W + $', '', m.group()), '...')'. UWAGA: Musisz dokładnie zastąpić '\ W', ponieważ wyklucza' _' (jeśli traktujesz "_" jako znak interpunkcyjny). DEMO: http://ideone.com/Ti44Bw – falsetru

+0

Świetnie! Wielkie dzięki! Nawiasem mówiąc, jest to odpowiednik twojego - 're.sub ('\ S +', lambda m: re.match (r '^ \ W * (. * \ W) \ W * $', m.group ()). group (1), text) '? Jeśli tak, to który z nich jest szybszy (lub w inny sposób lepszy)? [Demo] (http://ideone.com/EDan4X) –