¿"\ D" en regex significa un dígito?

147

He descubierto que en 123, \dpartidos 1y 3pero no 2. Me preguntaba si \dcoincide con un dígito que satisfaga qué tipo de requisito. Estoy hablando de expresiones regulares de estilo Python.

El complemento de expresión regular en Gedit está utilizando expresiones regulares de estilo Python. Creé un archivo de texto con su contenido

123

Solo 1y 3se corresponden con la expresión regular \d; 2no es.

En general, para una secuencia de números de dígitos sin otros caracteres intermedios, solo los dígitos de orden impar coinciden y los dígitos de orden par no. Por ejemplo en 12345, las coincidencias son 1, 3y 5.

Tim
fuente
44
\dcoincidirá 1, 2y 3. Si no es así, debe haber algo más en su expresión. ¿Puedes mostrar tu expresión completa?
Alex Aza
44
\des la abreviatura de [0-9], por lo que debe coincidir 2. Publique un caso de prueba completo (un script que se pueda ejecutar, que demuestre su problema) y tal vez podamos descubrir qué está mal.
zwol
@delnan: "Encontré que en 123, \ d coincide con 1 y 3 pero no con 2" me parece bastante concreto.
Ámbar
@ Ámbar: ¡Maldita sea, me perdí el no!
55
De acuerdo, no publicaré esto como respuesta porque no lo , pero creo que lo que está sucediendo es que gedit se niega a comenzar una nueva partida inmediatamente después del final de la partida anterior: omite un personaje, sea lo que sea , antes de intentar emparejar de nuevo. Intenta hacer coincidir 11111y 22222.
zwol

Respuestas:

459

[0-9] no siempre es equivalente a \d. En python3, [0-9]solo coincide con 0123456789caracteres, mientras que \dcoincide [0-9]y otros caracteres de dígitos, por ejemplo, números arábigos orientales ٠١٢٣٤٥٦٧٨٩.

Kirill Polishchuk
fuente
3
Probar esto en REPL: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')no muestra coincidencia
nickf
1
@nickf pruébalo en python3.
wim
2
Para los motores persa y árabe, en java y javascript, use \ p {Nd}
Alireza Fattahi el
66
+1, pero mmmm ... la etiqueta del OP es Pythony \dcoincide con cualquier dígito Unicode solo en Python3. En Python 2.7 sigue siendo el viejo ASCII [0-9], podría valer la pena aclarar eso en la respuesta. :)
zx81
1
@FarazAhmad, probablemente no, debes especificar todos los personajes por separado
Kirill Polishchuk
8

En la expresión regular de estilo Python, \dcoincide con cualquier dígito individual. Si está viendo algo que no parece hacer eso, proporcione la expresión regular completa que está usando, en lugar de solo describir ese símbolo en particular.

>>> 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>
Ámbar
fuente
¡Gracias! Mi analizador de expresiones regulares es un complemento de expresión regular en gedit. Todo el contenido es 123.
Tim
7

\\d{3} coincide con cualquier secuencia de tres dígitos en Java.

srajan
fuente
@ amal-murali, Cómo usar esta expresión para hacer coincidir cualquier secuencia de dígitos en java.
hasan.alkhatib
2
@HasanKhatib:\\d+
Amal Murali
5

Esto es solo una suposición, pero creo que su editor realmente coincide con cada dígito, 1 2 3pero solo se resaltan las coincidencias impares, para distinguirlo del caso cuando la 123cadena completa coincide.

La mayoría de las consolas regex resaltan coincidencias contiguas con diferentes colores, pero debido a la configuración del complemento, las limitaciones del terminal o por alguna otra razón, solo todos los demás grupos pueden resaltarse en su caso.

Caseta de perro87
fuente
1

Información sobre .NET / C #:

Carácter de dígito decimal: \ d \ d coincide con cualquier dígito decimal. Es equivalente al patrón de expresión regular \ p {Nd}, que incluye los dígitos decimales estándar 0-9, así como los dígitos decimales de varios otros conjuntos de caracteres.

Si se especifica un comportamiento compatible con ECMAScript, \ d es equivalente a [0-9]. Para obtener información sobre las expresiones regulares de ECMAScript, consulte la sección "Comportamiento de coincidencia de ECMAScript" en Opciones de expresión regular.

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

juFo
fuente