2016-05-15 4 views
3

Ich versuche, dies zu tun:Wie kann ich an Wortgrenzen mit Regexen teilen?

import re 
sentence = "How are you?" 
print(re.split(r'\b', sentence)) 

Das Ergebnis wie [u'How', u'are', u'you', u'?']

[u'How are you?'] 

ich etwas will zu sein. Wie kann dies erreicht werden?

+1

[Python kann nicht durch leere Zeichenfolge geteilt] (https://mail.python.org/pipermail/tutor/2003-August/024753 .html). –

+1

Außerdem sollte es zurückgeben "[u'How", "du", "du", "du", "du", ""] –

+0

@KennyLau Ja, richtig, aber das ist nicht so wichtig , Ich bin ok mit entweder Leerzeichen zurückgegeben oder ignoriert, da das Filtern ist trivial. – oarfish

Antwort

7

Leider kann Python nicht durch leere Zeichenfolgen aufgeteilt werden.

Um dies zu umgehen, müssten Sie findall statt split verwenden.

Eigentlich \b bedeutet nur Wortgrenze.

Es entspricht (?<=\w)(?=\W)|(?<=\W)(?=\w).

Das heißt, würde der folgende Code funktioniert:

import re 
sentence = "How are you?" 
print(re.findall(r'\w+|\W+', sentence)) 
+1

Nun, OP benötigt keine Leerzeichen nur Token. –

+0

Split durch '\ b' erzeugt auch Leerzeichen, weil' \ b' Null ist. –

+2

Alles, was ich meinte, ist, dass '\ w + | [^ \ w \ s] +' möglicherweise besser geeignet ist. –

1
import re 
split = re.findall(r"[\w']+|[.,!?;]", "How are you?") 
print(split) 

Ausgang:

['How', 'are', 'you', '?'] 

Ideone Demo

Regex101 Demo


Regex Erläuterung:

"[\w']+|[.,!?;]" 

    1st Alternative: [\w']+ 
     [\w']+ match a single character present in the list below 
      Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
      \w match any word character [a-zA-Z0-9_] 
      ' the literal character ' 
    2nd Alternative: [.,!?;] 
     [.,!?;] match a single character present in the list below 
      .,!?; a single character in the list .,!?; literally 
+0

http://stackoverflow.com/a/367292/6211883 –

+0

Es wird ziemlich verdächtig, wenn sogar die Reihenfolge gleich ist. –

+0

Warum haben Sie das '' 'Zeichen? – oarfish

Verwandte Themen