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

0voto

Hier ist meine Meinung dazu....

def split_string(source,splitlist):
    splits = frozenset(splitlist)
    l = []
    s1 = ""
    for c in source:
        if c in splits:
            if s1:
                l.append(s1)
                s1 = ""
        else:
            print s1
            s1 = s1 + c
    if s1:
        l.append(s1)
    return l

>>>out = split_string("Vorname,Nachname,Straße,Stadt,Bundesland,Postleitzahl",",")
>>>print out
>>>['Vorname', 'Nachname', 'Straße', 'Stadt', 'Bundesland', 'Postleitzahl']

0voto

nemozhp Punkte 79

Ich denke, folgendes ist die beste Antwort, um Ihren Bedürfnissen zu entsprechen:

\W+ ist vielleicht für diesen Fall geeignet, aber möglicherweise nicht für andere Fälle.

filter(None, re.compile('[ |,|\-|!|?]').split( "Hey, you - what are you doing here!?")

0 Stimmen

Ich stimme zu, die \w und \W Lösungen sind keine Antwort auf die Frage. Beachten Sie, dass in Ihrer Antwort | entfernt werden soll (Sie denken an expr0|expr1 anstelle von [char0 char1…]). Außerdem ist es nicht notwendig, den regulären Ausdruck zu compile().

0voto

Justin Fay Punkte 2520

Ich musste kürzlich das tun, aber ich wollte eine Funktion, die in gewissem Maße der Standardbibliothek str.split entspricht. Diese Funktion verhält sich genauso wie die Standardbibliothek, wenn sie mit 0 oder 1 Argumenten aufgerufen wird.

def split_many(string, *separators):
    if len(separators) == 0:
        return string.split()
    if len(separators) > 1:
        table = {
            ord(separator): ord(separator[0])
            for separator in separators
        }
        string = string.translate(table)
    return string.split(separators[0])

HINWEIS: Diese Funktion ist nur nützlich, wenn Ihre Trennzeichen aus einem einzigen Zeichen bestehen (wie in meinem Anwendungsfall).

0voto

Martlark Punkte 13017

Hier ist mein Versuch, einen Split mit mehreren Trennzeichen zu erstellen:

def msplit( str, delims ):
  w = ''
  for z in str:
    if z not in delims:
        w += z
    else:
        if len(w) > 0 :
            yield w
        w = ''
  if len(w) > 0 :
    yield w

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