2017-05-27 9 views
0

Ich frage mich nur in Regx, warum wir keine Zeichenklasse innerhalb einer Zeichenklasse haben könnten? Zum Beispiel wie unten muss ich alle Zahlen ausschließen, die mit 0 beginnen, aber nicht 0 selbst.Zeichenklasse Regulärer Ausdruck Python

jedoch die eckige Klammer in eckiger Klammer nicht gültig ist: [[]]

string = re.findall ('^ [(++) [1-9] [0-9] (++)?] + $ ',' 01 + 2 ')

warum ist das? Ist es nicht viel einfacher, dass wir solche Ausdrücke wie oben machen können?

Vielen Dank! Erik

Antwort

0

Sie können die Nummer Bereiche innerhalb einer Zeichenklasse wie [[0-5]] nicht verwenden.
Einige Regex-Engines, Tools und Sprachen unterstützen POSIX character classes, wo wir [[:digit:][:punct:]] angeben können.
Aber das ist nicht der Python Fall.

Um alle Zahlen auszuschließen, die mit 0 beginnen, aber 0 selbst nicht die folgende Methode verwenden:

s = '01 2 0 33 789 005 4 08 7' 
filtered = re.findall(r'\b([1-9]+|0)\b', s) 

print(filtered) 

Der Ausgang:

['2', '0', '33', '789', '4', '7'] 
+0

Danke Roman! Das ist ein netter Ausdruck! Ich frage mich nur, ob ich nur '+' und Zahlen einfügen möchte, die nicht mit 0, sondern mit 0 beginnen, ich denke, es wäre einfacher mit Klasse zu tun, es gibt keine andere Möglichkeit, an die ich denken kann. .. zum Beispiel '1 0 ++' –

0

Hier ist, was ich getan habe:

string = re.findall ('^ [(++)? (1-9d +) (++)?] + $', '0 1 +')

würde es die 0 nicht als einzelne Zahl in diesem Fall tho fangen.

danke! Erik