2016-10-11 11 views
-1

Ich versuche zu verstehen, was diese Regex ([0.00-9.00]+) in Python tut. Die Art, wie ich das verstehe, ist, dass es mit 0 . 0 0-9 . 0 0 übereinstimmen würde, also sind die Nullen hier überflüssig. Da es eine . im Inneren gibt, sollte es mit jedem Zeichen übereinstimmen und die vollständige Übereinstimmung sollte eine nicht leere Folge von Zeichen sein, nicht unbedingt Ziffern, aber es verhält sich nicht so. Fehle ich etwas?Was bedeutet Float-Bereich in quadratischen Klammern "[]" in Regex bedeuten?

Few examples of how it behaves

+1

Nein, '.' in einem Zeichenbereich stimmt nicht mit einem 'beliebigen' Zeichen überein, nur ein Literalpunkt. –

+1

https://regex101.com/r/BSZI6b/1 – deceze

+1

Siehe auch http://stackoverflow.com/questions/19976018/does-a-dot-have-to-e-caped-in-a-character- Klasse-Quadrat-Klammern-von-ein-Regula und http://stackoverflow.com/questions/21929693/decyphering-a-simple-regex/21929764#21929764 –

Antwort

6

Die Nullen sind in der Tat überflüssig. Die . entspricht nur einem Literal ., weil es Teil einer Zeichenklasse ist, die [...] Syntax. Es hat dort keine besondere Bedeutung.

[0-9.]+ 

und immer noch genau die gleichen Eingänge entsprechen:

So könnte die Zeichenklasse reduziert werden.

Der Autor dieses Regex-Textes scheint das Merkmal - in einer Zeichenklasse mit einem numerischen Bereichsmerkmal verwechselt zu haben; es gibt keine solche Sache in einer Regex. Sie müssten einzelne Zeichen zusammenbringen, die zusammen als reelle Zahlen gelesen werden können. In der folgenden würde passen tatsächlich solche Zahlen:

(?<!\d)\d\.\d\d(?!\d) 

wo der negativer Blick hinter und Look-Ahead es sicher nicht mehr Ziffern diesen Text umgeben. \d ist eine Kurzschrift für [0-9] hier.

Siehe this regex101 demo.

+0

Das erklärt es. Danke für die Antwort! –