2017-05-21 4 views
0

Ich habe mehrere Strings, wo Worte mit Kommas oder Perioden unterteilt:Wie benutzt man re.split für Kommas und Punkte?

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard'] 

ich dies basierend auf Kommas und Punkte teilen möchte:

string = ['apple','pear','grapes','carrot','cabbage','veggies','fruit','yard'] 

Ich weiß nur, wie eine Bedingung verwenden für re.split:

re.split(',',string) 

Dies wird Wörter nicht teilen, die Perioden dazwischen haben. Wie kann ich die ganze Zeichenfolge teilen, so dass Wörter geteilt werden, wenn Kommas oder Punkte dazwischen liegen?

+1

Der Split-Parameter ist ein regulärer Ausdruck; benutze 'r" [.,] "' – jtbandes

Antwort

1
>>> import re 
>>> string = 'apple,pear,grapes,carrot.cabbage,veggies.fruit,yard' 
>>> re.split(',|\.',string) 
['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard'] 

Dieses entweder , oder . teilt mit der Änderung Operator | (die als \. entwertet werden müssen). könnte

>>> re.split('[,.]',string) 
['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard'] 

Aber das ist weniger allgemein als weder Charakter mit einem Satz ersetzt:

Es kann auch mit einer Zeichenklasse geschrieben werden.

+0

Du könntest auch eine Zeichenklasse verwenden –

+0

In _ [,.] _ musst du den Punkt nicht verlassen. Und für Single-Character-Auswahl sind eckige Klammern bevorzugt Option – volcano

0
import re 
string = 'apple,pear,grapes,carrot.cabbage,veggies.fruit,yard' 
arr = re.split('[,.]', string) 
print(arr) 
+0

Sie müssen den Zeitraum in einer Zeichenklasse nicht entkommen –

+0

Sie haben Recht, ich habe es behoben. – user3429660

0

Sie können chain.from_iterable von itertools Modul benutzen, um Ihre Liste zu handhaben, wenn Sie viele Elemente in der String-Variable haben

from itertools import chain 

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard'] 
final = list(chain.from_iterable(re.split(',', k) for k in string)) 
print(final) 

Ausgang:

['apple', 'pear', 'grapes', 'carrot.cabbage', 'veggies.fruit', 'yard'] 

Und Sie können sich ändern nur das Muster innerhalb re.split() zu teilen zwischen ',' und :

from itertools import chain 

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard'] 
final = list(chain.from_iterable(re.split('[,.]', k) for k in string)) 
print(final) 

Output:

['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard']