"\ 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.


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 ٠١٢٣٤٥٦٧٨٩.


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


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>

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.


@ 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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.