2016-12-27 3 views
0

Die integrierte <string>.split() Prozedur funktioniert nur mit Leerzeichen, um die Zeichenfolge zu teilen.Better Split-String-Methode - geteilt durch mehrere Zeichen

Ich möchte eine Prozedur definieren, split_string, die zwei Eingaben benötigt: die zu trennende Zeichenfolge und eine Zeichenfolge, die alle Zeichen enthält, die als Trennzeichen betrachtet werden.

Die Prozedur sollte eine Liste von Zeichenfolgen zurückgeben, die die Quellzeichenfolge um die Zeichen in der Liste auflösen.

def split_string(source,list): 
    ... 

>>> print split_string("This is a test-of the,string separation-code!",",!-") 
['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code'] 
+3

"Die integrierte .split() - Prozedur verwendet nur Leerzeichen zum Aufteilen der Zeichenfolge." Das ist sachlich falsch. Wenn Sie kein Argument angeben, wird Whitespace verwendet. Aber wenn Sie das tun, wird dieses Argument als Trennzeichen verwendet. – DeepSpace

+0

Was wäre auch die Ausgabe von 'split_string ('abcd', 'bc')'? – DeepSpace

Antwort

1

re.split() Werke:

>>> import re 
>>> s = "This is a test-of the,string separation-code!" 
>>> re.split(r'[ \-\,!]+', s) 

['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code', ''] 

In Ihrem Fall suchte nach Worten scheint sinnvoller:

>>> re.findall(r'[\w']+', s) 
['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code'] 
1

Hier ist eine Funktion, die Sie wiederverwenden können - auch das Sonderzeichen entkommt:

def escape_char(char): 
    special = ['.', '^', '$', '*', '+', '?', '\\', '[', ']', '|'] 
    return '\\{}'.format(char) if char in special else char 

def split(text, *delimiters): 
    return re.split('|'.join([escape_char(x) for x in delimiters]), text) 

Es werden nicht automatisch leere Einträge entfernt, z. B .:

>>> split('Python, is awesome!', '!', ',', ' ') 
['Python', '', 'is', 'awesome', '']