841 Stimmen

Strings in Wörter mit mehreren Wortbegrenzern aufteilen

Ich denke, was ich tun möchte, ist eine ziemlich häufige Aufgabe, aber ich habe keine Referenz im Web gefunden. Ich habe Text mit Satzzeichen und möchte eine Liste der Wörter.

"Hey, you - what are you doing here!?"

sollte sein

['hey', 'you', 'what', 'are', 'you', 'doing', 'here']

Aber Pythons str.split() funktioniert nur mit einem Argument, also habe ich alle Wörter mit dem Satzzeichen, nachdem ich mit Leerzeichen aufgeteilt habe. Irgendwelche Ideen?

7 Stimmen

13 Stimmen

Python's str.split() funktioniert auch ohne Argumente überhaupt

1voto

Shrikant Punkte 353

Zunächst einmal verwenden Sie immer re.compile() bevor Sie eine RegEx-Operation in einer Schleife ausführen, weil es schneller funktioniert als normale Operationen.

Also für Ihr Problem kompilieren Sie zuerst das Muster und führen dann die Aktion darauf aus.

import re
DATA = "Hey, you - what are you doing here!?"
reg_tok = re.compile("[\w']+")
print reg_tok.findall(DATA)

1voto

badas Punkte 19

Ich habe das gleiche Problem wie @ooboo und habe dieses Thema gefunden @ghostdog74 hat mich inspiriert, vielleicht findet jemand meine Lösung nützlich

str1='adj:sg:nom:m1.m2.m3:pos'
splitat=':.'
''.join([ s if s not in splitat else ' ' for s in str1]).split()

Gib etwas in den Leerzeichen ein und teile es mit dem gleichen Zeichen auf, wenn du nicht an Leerzeichen teilen möchtest.

0 Stimmen

Was ist, wenn ich mit einem wort teilen muss?

0voto

Ich mag am liebsten die replace() Methode. Das folgende Verfahren ändert alle Trennzeichen, die in einem String splitlist definiert sind, in das erste Trennzeichen in splitlist und teilt dann den Text an diesem einen Trennzeichen auf. Es berücksichtigt auch, wenn splitlist zufällig ein leerer String ist. Es gibt eine Liste von Wörtern zurück, ohne leere Strings darin.

def split_string(text, splitlist):
    for sep in splitlist:
        text = text.replace(sep, splitlist[0])
    return filter(None, text.split(splitlist[0])) if splitlist else [text]

0voto

Nathan B Punkte 1336

Wenn Sie eine umkehrbare Operation möchten (die Trennzeichen bewahren), können Sie diese Funktion verwenden:

def tokenizeSentence_Reversible(sentence):
    setOfDelimiters = ['.', ' ', ',', '*', ';', '!']
    listOfTokens = [sentence]

    for delimiter in setOfDelimiters:
        newListOfTokens = []
        for ind, token in enumerate(listOfTokens):
            ll = [([delimiter, w] if ind > 0 else [w]) for ind, w in enumerate(token.split(delimiter))]
            listOfTokens = [item for sublist in ll for item in sublist] # flattens.
            listOfTokens = filter(None, listOfTokens) # Entfernt leere Tokens: ''
            newListOfTokens.extend(listOfTokens)

        listOfTokens = newListOfTokens

    return listOfTokens

0voto

inspectorrr Punkte 17
def get_words(s):
    l = []
    w = ''
    for c in s.lower():
        if c in '-!?,. ':
            if w != '': 
                l.append(w)
            w = ''
        else:
            w = w + c
    if w != '': 
        l.append(w)
    return l

Hier ist die Verwendung:

>>> s = "Hey, you - what are you doing here!?"
>>> print get_words(s)
['hey', 'you', 'what', 'are', 'you', 'doing', 'here']

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X