Bedeutet "\ d" in Regex eine Ziffer?

147

Ich fand das in 123, \dStreichhölzer 1und 3aber nicht 2. Ich habe mich gefragt, ob \deine Ziffer mit einer bestimmten Anforderung übereinstimmt. Ich spreche von Regex im Python-Stil.

Das Plugin für reguläre Ausdrücke in Gedit verwendet Regex im Python-Stil. Ich habe eine Textdatei mit dem Inhalt erstellt

123

Nur 1und 3werden von der Regex abgeglichen \d; 2ist nicht.

Im Allgemeinen stimmen bei einer Folge von Ziffern ohne andere Zeichen dazwischen nur die Ziffern ungerader Reihenfolge überein und die Ziffern gerader Reihenfolge nicht. Zum Beispiel in 12345, sind die Spiele 1, 3und 5.

Tim
quelle
4
\dwird übereinstimmen 1, 2und 3. Wenn nicht, muss etwas anderes in Ihrem Ausdruck sein. Können Sie Ihren vollen Ausdruck zeigen?
Alex Aza
4
\dist eine Abkürzung für [0-9], also sollte es passen 2. Bitte veröffentlichen Sie einen vollständigen Testfall (ein Skript, das ausgeführt werden kann und Ihr Problem demonstriert), und vielleicht können wir herausfinden, was falsch ist.
zwol
@delnan: "Ich habe festgestellt, dass in 123 \ d mit 1 und 3 übereinstimmt, aber nicht mit 2" klingt für mich ziemlich konkret.
Amber
@ Amber: Verdammt, ich habe das nicht verpasst!
5
Okay, ich poste dies nicht als Antwort, weil ich es nicht weiß , aber ich denke, was los ist, ist, dass gedit sich weigert, unmittelbar nach dem Ende des vorherigen Spiels ein neues Match zu starten - es überspringt einen Charakter, was auch immer es ist , bevor Sie erneut versuchen, eine Übereinstimmung zu finden. Bitte versuchen Sie es mit Matching 11111und 22222.
zwol

Antworten:

459

[0-9] ist nicht immer gleichbedeutend mit \d. Stimmt in Python3 [0-9]nur mit 0123456789Zeichen überein , während \dÜbereinstimmungen [0-9]und andere Ziffern, z. B. ostarabische Ziffern, übereinstimmen ٠١٢٣٤٥٦٧٨٩.

Kirill Polishchuk
quelle
3
Versuchen Sie dies in der REPL: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')zeigt keine Übereinstimmung
Nickf
1
@nickf probiere es auf python3.
Wim
2
Verwenden Sie für Persisch und Arabisch in Java- und Javascript-Engines \ p {Nd}
Alireza Fattahi
6
+1, aber mmmm ... das OP-Tag ist Pythonund \dstimmt mit allen Unicode-Ziffern nur in Python3 überein. In Python 2.7 ist es immer noch das alte ASCII [0-9]- es könnte sich lohnen, dies in der Antwort zu verdeutlichen. :)
zx81
1
@ FarazAhmad, wahrscheinlich nicht, müssen Sie alle Zeichen separat angeben
Kirill Polishchuk
13

\dEntspricht einer einzelnen Ziffer in den meisten Regex-Grammatikstilen, einschließlich Python. Regex-Referenz

Wille
quelle
8

Entspricht im regulären Regex im Python-Stil \djeder einzelnen Ziffer. Wenn Sie etwas sehen, das dies nicht zu tun scheint, geben Sie bitte den vollständigen regulären Ausdruck an, den Sie verwenden, anstatt nur dieses eine Symbol zu beschreiben.

>>> import re
>>> re.match(r'\d', '3')
<_sre.SRE_Match object at 0x02155B80>
>>> re.match(r'\d', '2')
<_sre.SRE_Match object at 0x02155BB8>
>>> re.match(r'\d', '1')
<_sre.SRE_Match object at 0x02155B80>
Bernstein
quelle
Vielen Dank! Mein Regex-Parser ist ein Plugin für reguläre Ausdrücke in gedit. Der ganze Inhalt ist 123.
Tim
7

\\d{3} Entspricht einer beliebigen dreistelligen Folge in Java.

Srajan
quelle
@ amal-murali, Verwendung dieses Ausdrucks, um eine beliebige Ziffernfolge in Java abzugleichen.
hasan.alkhatib
2
@ HasanKhatib:\\d+
Amal Murali
5

Dies ist nur eine Vermutung, aber ich denke, Ihr Editor stimmt tatsächlich mit jeder einzelnen Ziffer überein - 1 2 3- aber es werden nur ungerade Übereinstimmungen hervorgehoben, um sie von dem Fall zu unterscheiden, in dem das Ganze vorliegt123 Zeichenfolge übereinstimmt.

Die meisten Regex-Konsolen heben zusammenhängende Übereinstimmungen mit unterschiedlichen Farben hervor. Aufgrund der Plugin-Einstellungen, Terminal-Einschränkungen oder aus anderen Gründen wird in Ihrem Fall möglicherweise nur jede andere Gruppe hervorgehoben.

Hundehütte87
quelle
1

Infos zu .NET / C #:

Dezimalstellenzeichen: \ d \ d entspricht einer beliebigen Dezimalstelle. Es entspricht dem Muster des regulären Ausdrucks \ p {Nd}, das die Standard-Dezimalstellen 0-9 sowie die Dezimalstellen einer Reihe anderer Zeichensätze enthält.

Wenn ECMAScript-kompatibles Verhalten angegeben ist, entspricht \ d [0-9]. Informationen zu regulären ECMAScript-Ausdrücken finden Sie im Abschnitt "ECMAScript-Übereinstimmungsverhalten" unter Optionen für reguläre Ausdrücke.

Info: https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#decimal-digit-character-d

juFo
quelle