2010-11-18 18 views
0

Ich möchte eine Zeichenfolge in eine Liste in Python, abhängig von Ziffer/nicht digit. Zum BeispielWie teilt man eine Zeichenkette (mit Regex?) Abhängig von der Ziffer/nicht Ziffer

5 55+6+ 5/ 

['5','55','+','6','+','5','/'] 

zurückkehren sollte ich einen Code zur Zeit haben, die in einer Zeichenkette durch die Zeichen-Schleifen und testet sie re.match ("\ d") verwendet oder ("\ D"). Ich habe mich gefragt, ob es einen besseren Weg dafür gibt.

PS: muss mit Python 2.4

+0

Tokenisierung, nehme ich an? – delnan

+0

Ja, so ziemlich. Es ist für einen umgekehrten polnischen Notationsrechner, also konnte ich nicht einfach davon ausgehen, dass immer ein Leerzeichen zwischen den Charakteren war (wusste nicht, dass es einen Namen für das gab, was ich bis jetzt machen wollte. Danke, dass du es mir erzählt hast). – rikkit

Antwort

5

Unter der Annahme, die + zwischen 6 und 5 muss kompatibel sein, angepasst werden (was Sie fehlen),

>>> import re 
>>> s = '5 55+6+ 5/' 
>>> re.findall(r'\d+|[^\d\s]+', s) 
['5', '55', '+', '6', '+', '5', '/'] 
+1

Tolles Muster, aber es scheint, als könnten Sie auch findall verwenden. Sie brauchen auch nicht das nachgestellte '\ s *' im Muster, aber es tut auch nicht weh. +1 –

+0

@Justin: Richtig. Aktualisiert. – kennytm

+0

Danke! re.findall war genau das, wonach ich suchte. Verwendet "[] + | \ d + |^\ d" am Ende (mehrere aufeinanderfolgende Ziffern zusammen, aber keine Ziffern getrennt). – rikkit

0

Wenn Auftrag, Sie spielt keine Rolle, 2 Spagat machen könnte:

re.split('\D+', mystring) 

re.split('\d+', mystring) 

jedoch aus Ihrer Eingabe, es sieht aus wie es mathematisch sein könnte ... in diesem Fall um würde Materie. :)

Sie sind am besten mit re.findall, wie in einer der anderen Antworten.

+0

Ja, es ist für einen umgekehrten polnischen Notationsrechner - Bestellung ist definitiv wichtig! – rikkit

2

dieses ist einfachste :)

re.findall('\d+|[^\d]+','134aaaaa') 
+0

es isst nicht die Leerzeichen, probieren Sie es am Beispieleingang ... –

1

Verwenden findall oder finditer:

>>> re.findall(r'\d+|[^\s\d]+', '5 55+6+ 5/') 
['5', '55', '+', '6', '+', '5', '/'] 
Verwandte Themen