Versuche dies:
import re
mystr = 'This is a string, with words!'
wordList = re.sub("[^\w]", " ", mystr).split()
Wie es funktioniert:
Aus den Dokumenten:
re.sub(pattern, repl, string, count=0, flags=0)
Geben Sie die Zeichenfolge zurück, die durch Ersetzen der nicht ganz überlappenden Muster in der Zeichenfolge ganz links durch die Ersetzungsreplikation erhalten wurde. Wenn das Muster nicht gefunden wird, wird die Zeichenfolge unverändert zurückgegeben. repl kann eine Zeichenfolge oder eine Funktion sein.
also in unserem Fall:
Muster ist ein nicht alphanumerisches Zeichen.
[\ w] bedeutet ein beliebiges alphanumerisches Zeichen und entspricht dem Zeichensatz [a-zA-Z0-9_]
a bis z, A bis Z, 0 bis 9 und Unterstrich.
Daher stimmen wir alle nicht alphanumerischen Zeichen überein und ersetzen sie durch ein Leerzeichen.
und dann teilen wir es (), wodurch die Zeichenfolge nach Leerzeichen aufgeteilt und in eine Liste konvertiert wird
also 'hallo-welt'
wird "Hallo Welt"
mit re
und dann ['Hallo', 'Welt']
nach split ()
Lassen Sie mich wissen, wenn Zweifel auftauchen.
\w
.Ich denke, dies ist der einfachste Weg für alle anderen, die angesichts der späten Antwort über diesen Beitrag stolpern:
>>> string = 'This is a string, with words!' >>> string.split() ['This', 'is', 'a', 'string,', 'with', 'words!']
quelle
Das richtig zu machen ist ziemlich komplex. Für Ihre Forschung wird es als Wort-Tokenisierung bezeichnet. Sie sollten sich NLTK ansehen, wenn Sie sehen möchten, was andere getan haben, anstatt von vorne zu beginnen:
>>> import nltk >>> paragraph = u"Hi, this is my first sentence. And this is my second." >>> sentences = nltk.sent_tokenize(paragraph) >>> for sentence in sentences: ... nltk.word_tokenize(sentence) [u'Hi', u',', u'this', u'is', u'my', u'first', u'sentence', u'.'] [u'And', u'this', u'is', u'my', u'second', u'.']
quelle
Der einfachste Weg:
>>> import re >>> string = 'This is a string, with words!' >>> re.findall(r'\w+', string) ['This', 'is', 'a', 'string', 'with', 'words']
quelle
Der
string.punctuation
Vollständigkeit halber verwenden :import re import string x = re.sub('['+string.punctuation+']', '', s).split()
Dies behandelt auch Zeilenumbrüche.
quelle
Nun, du könntest es gebrauchen
import re list = re.sub(r'[.!,;?]', ' ', string).split()
Beachten Sie, dass beide
string
undlist
Namen von integrierten Typen sind, sodass Sie diese wahrscheinlich nicht als Variablennamen verwenden möchten.quelle
Inspiriert von der Antwort von @ mtrw, aber verbessert, um Interpunktion nur an Wortgrenzen zu entfernen:
import re import string def extract_words(s): return [re.sub('^[{0}]+|[{0}]+$'.format(string.punctuation), '', w) for w in s.split()] >>> str = 'This is a string, with words!' >>> extract_words(str) ['This', 'is', 'a', 'string', 'with', 'words'] >>> str = '''I'm a custom-built sentence with "tricky" words like https://stackoverflow.com/.''' >>> extract_words(str) ["I'm", 'a', 'custom-built', 'sentence', 'with', 'tricky', 'words', 'like', 'https://stackoverflow.com']
quelle
Ein regulärer Ausdruck für Wörter würde Ihnen die meiste Kontrolle geben. Sie sollten sorgfältig überlegen, wie Sie mit Wörtern mit Bindestrichen oder Apostrophen wie "Ich bin" umgehen sollen.
quelle
Persönlich denke ich, dass dies etwas sauberer ist als die Antworten
def split_to_words(sentence): return list(filter(lambda w: len(w) > 0, re.split('\W+', sentence))) #Use sentence.lower(), if needed
quelle
list=mystr.split(" ",mystr.count(" "))
quelle
Dies ist aus meinem Versuch einer Codierungsherausforderung, die keinen regulären Ausdruck verwenden kann.
outputList = "".join((c if c.isalnum() or c=="'" else ' ') for c in inputStr ).split(' ')
Die Rolle des Apostrophs scheint interessant.
quelle
Auf diese Weise eliminieren Sie jedes Sonderzeichen außerhalb des Alphabets:
def wordsToList(strn): L = strn.split() cleanL = [] abc = 'abcdefghijklmnopqrstuvwxyz' ABC = abc.upper() letters = abc + ABC for e in L: word = '' for c in e: if c in letters: word += c if word != '': cleanL.append(word) return cleanL s = 'She loves you, yea yea yea! ' L = wordsToList(s) print(L) # ['She', 'loves', 'you', 'yea', 'yea', 'yea']
Ich bin mir nicht sicher, ob dies schnell oder optimal ist oder sogar die richtige Art zu programmieren.
quelle
Sie können dies versuchen:
tryTrans = string.maketrans(",!", " ") str = "This is a string, with words!" str = str.translate(tryTrans) listOfWords = str.split()
quelle