2013-07-12 3 views
8

Ich habe eine Zeichenfolge:Dividieren Zeichenfolge durch Zeilenumbruch oder Zeit mit Python regulären Ausdrücken

"""Hello. It's good to meet you. 
My name is Bob.""" 

Ich versuche, den besten Weg zu finden, diese in eine Liste von Perioden und Zeilenumbrüchen geteilt aufzuspalten:

["Hello", "It's good to meet you", "My name is Bob"] 

Ich bin mir ziemlich sicher, dass ich reguläre Ausdrücke verwenden sollte, aber da ich keine Erfahrung mit ihnen habe, kämpfe ich darum, herauszufinden, wie das geht.

Antwort

17

Sie brauchen Regex nicht.

>>> txt = """Hello. It's good to meet you. 
... My name is Bob.""" 
>>> txt.split('.') 
['Hello', " It's good to meet you", '\nMy name is Bob', ''] 
>>> [x for x in map(str.strip, txt.split('.')) if x] 
['Hello', "It's good to meet you", 'My name is Bob'] 
1
>>> s = """Hello. It's good to meet you. 
... My name is Bob.""" 
>>> import re 
>>> p = re.compile(r'[^\s\.][^\.\n]+') 
>>> p.findall(s) 
['Hello', "It's good to meet you", 'My name is Bob'] 
>>> s = "Hello. #It's good to meet you # .'" 
>>> p.findall(s) 
['Hello', "#It's good to meet you # "] 
+0

In '' "Hallo. #Es ist gut, dich kennenzulernen # .' Deine Regex fangen '' ['Hallo', "Es ist gut dich zu treffen #"] '' – eyquem

2

Für Ihr Beispiel würde es genügen, auf Punkte zu spalten, gegebenenfalls gefolgt von einem Leerzeichen (und leere Ergebnisse zu ignorieren):

>>> s = """Hello. It's good to meet you. 
... My name is Bob.""" 
>>> import re 
>>> re.split(r"\.\s*", s) 
['Hello', "It's good to meet you", 'My name is Bob', ''] 

Im wirklichen Leben, die Sie haben würden Griff Mr. Orange, Dr. Greene und George W. Bush, obwohl ...

0

Sie diese Spaltung

können
re.split(r"(?<!^)\s*[.\n]+\s*(?!$)", s) 
0

Mine:

re.findall('(?=\S)[^.\n]+(?<=\S)',su) 
Verwandte Themen