Zunächst einmal glaube ich nicht, dass Ihre Absicht tatsächlich darin besteht, Satzzeichen als Trennzeichen in den Split-Funktionen zu verwenden. Ihre Beschreibung legt nahe, dass Sie einfach die Satzzeichen aus den resultierenden Zeichenfolgen entfernen möchten.
Dies begegnet mir ziemlich häufig, und meine übliche Lösung erfordert keinen erneuten Import.
Einzeilige Lambda-Funktion mit Listenverständnis:
(erfordert import string
):
split_without_punc = lambda text : [word.strip(string.punctuation) for word in
text.split() if word.strip(string.punctuation) != '']
# Funktionsaufruf
split_without_punc("Hey, you -- what are you doing?!")
# gibt ['Hey', 'you', 'what', 'are', 'you', 'doing'] zurück
Funktion (traditionell)
Als traditionelle Funktion sind dies immer noch nur zwei Zeilen mit einer Listenverständnis (zusätzlich zu import string
):
def split_without_punctuation2(text):
# Nach Leerzeichen aufteilen
Worte = text.split()
# Satzzeichen von jedem Wort entfernen
return [word.strip(ignore) for word in words if word.strip(ignore) != '']
split_without_punctuation2("Hey, you -- what are you doing?!")
# gibt ['Hey', 'you', 'what', 'are', 'you', 'doing'] zurück
Es lässt auch natürlich Kontraktionen und Bindestriche intakt. Sie können jederzeit text.replace("-", " ")
verwenden, um Bindestriche in Leerzeichen umzuwandeln, bevor Sie aufteilen.
Allgemeine Funktion ohne Lambda oder Listenverständnis
Für eine allgemeinere Lösung (bei der Sie die Zeichen angeben können, die entfernt werden sollen) und ohne Listenverständnis erhalten Sie:
def split_without(text: str, ignore: str) -> list:
# Nach Leerzeichen aufteilen
split_string = text.split()
# Satzzeichen aus dem Ignore-String entfernen und leere Zeichenfolgen ignorieren
Worte = []
for word in split_string:
word = word.strip(ignore)
if word != '':
words.append(word)
return words
# Situationsspezifischer Aufruf der allgemeinen Funktion
import string
final_text = split_without("Hey, you - what are you doing?!", string.punctuation)
# gibt ['Hey', 'you', 'what', 'are', 'you', 'doing'] zurück
Sie können die Lambda-Funktion natürlich auch auf beliebige angegebene Zeichenfolgen von Zeichen verallgemeinern.
7 Stimmen
docs.python.org/library/re.html
13 Stimmen
Python's
str.split()
funktioniert auch ohne Argumente überhaupt