"\ D" em regex significa um dígito?

147

Eu descobri isso em 123, \dcorrespondências 1e 3mas não 2. Eu queria saber se \dcorresponde a um dígito satisfazendo que tipo de requisito? Eu estou falando sobre regex estilo Python.

O plug-in de expressão regular no Gedit está usando o regex no estilo Python. Criei um arquivo de texto com seu conteúdo

123

Somente 1e 3são correspondidos pelo regex \d; 2não é.

Geralmente, para uma sequência de números de dígitos sem outros caracteres, apenas os dígitos ímpares da ordem são correspondentes e os dígitos pares não. Por exemplo 12345, em , as correspondências são 1, 3e 5.

Tim
fonte
4
\dirá corresponder a 1, 2e 3. Caso contrário, deve haver algo mais na sua expressão. Você pode mostrar sua expressão completa?
precisa
4
\dé uma abreviação de [0-9], então deve corresponder 2. Poste um caso de teste completo (um script que possa ser executado, que demonstre seu problema) e talvez possamos descobrir o que está errado.
Zwol
@ delnan: "Descobri que em 123, \ d corresponde a 1 e 3, mas não a 2" parece bastante concreto para mim.
Âmbar
@ Amber: Droga, perdi o não!
5
Ok, não estou postando isso como resposta porque não sei , mas acho que o que está acontecendo é que o gedit se recusa a iniciar uma nova partida imediatamente após o final da partida anterior - pula um caractere, seja qual for , antes de tentar corresponder novamente. Por favor, tente combinar 11111e 22222.
Zwol

Respostas:

459

[0-9] nem sempre é equivalente a \d. No python3, [0-9]corresponde apenas a 0123456789caracteres, enquanto \dcorresponde a [0-9]outros caracteres de dígito, por exemplo, algarismos arábicos orientais ٠١٢٣٤٥٦٧٨٩.

Kirill Polishchuk
fonte
3
Tentando fazer isso no REPL: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')não mostra resultados
nickf
1
@nickf experimentá-lo em python3.
Wim 18/05
2
Para persa e árabe, nos mecanismos java e javascript, use \ p {Nd}
Alireza Fattahi 16/13
6
+1, mas mmmm ... a marca do OP é Pythone \dcorresponde a qualquer dígito Unicode apenas no Python3. No Python 2.7, ainda é o antigo ASCII [0-9]- pode valer a pena esclarecer isso na resposta. :)
ZX81
1
@FarazAhmad, provavelmente não, você tem que especificar todos os caracteres separadamente
Kirill Polishchuk
13

\dcorresponde a qualquer dígito único na maioria dos estilos gramaticais regex, incluindo python. Referência Regex

Vai
fonte
8

No regex no estilo Python, \dcorresponde a qualquer dígito individual. Se você estiver vendo algo que parece não fazer isso, forneça o regex completo que você está usando, em vez de apenas descrever esse símbolo em 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
fonte
Obrigado! Meu analisador de regex é um plug-in de expressão regular no gedit. Todo o conteúdo é 123.
Tim
7

\\d{3} corresponde a qualquer sequência de três dígitos em Java.

srajan
fonte
@ amal-murali, Como usar esta expressão para corresponder a qualquer sequência de dígitos em java.
hasan.alkhatib
2
@HasanKhatib:\\d+
Amal Murali
5

Isso é apenas um palpite, mas acho que seu editor realmente corresponde a cada dígito - 1 2 3- mas apenas as correspondências ímpares são destacadas, para diferenciá-lo do caso em que toda a 123string é correspondida.

A maioria dos consoles regex destaca correspondências contíguas com cores diferentes, mas devido às configurações do plug-in, às limitações do terminal ou por algum outro motivo, apenas todos os outros grupos podem ser destacados no seu caso.

Doghouse87
fonte
1

Informações sobre .NET / C #:

Caractere do dígito decimal: \ d \ d corresponde a qualquer dígito decimal. É equivalente ao padrão de expressão regular \ p {Nd}, que inclui os dígitos decimais padrão de 0 a 9, bem como os dígitos decimais de vários outros conjuntos de caracteres.

Se o comportamento compatível com ECMAScript for especificado, \ d será equivalente a [0-9]. Para obter informações sobre expressões regulares do ECMAScript, consulte a seção "Comportamento de correspondência do ECMAScript" em Opções de expressão regular.

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

juFo
fonte