"\ D" in regex significa una cifra?


147

L'ho trovato in 123, \dpartite 1e 3ma no 2. Mi chiedevo se \dcorrispondesse a una cifra che soddisfacesse il tipo di requisito? Sto parlando di regex in stile Python.

Il plugin di espressioni regolari in Gedit utilizza regex in stile Python. Ho creato un file di testo con il suo contenuto essere

123

Solo 1e 3sono abbinati dal regex \d; 2non è.

Generalmente per una sequenza di numeri di cifre senza altri caratteri tra, solo le cifre di ordine dispari sono corrispondenze e le cifre di ordine pari no. Ad esempio, nel 12345, le partite sono 1, 3e 5.


4
\dcorrisponderà 1, 2e 3. In caso contrario, ci deve essere qualcos'altro nella tua espressione. Puoi mostrare la tua piena espressione?
Alex Aza,

4
\dè una scorciatoia per [0-9], quindi dovrebbe corrispondere 2. Si prega di inviare un caso di test completo (uno script che può essere eseguito, che dimostra il tuo problema) e forse possiamo capire cosa c'è che non va.
zwol,

@delnan: "Ho scoperto che nel 123, corrisponde a 1 e 3 ma non a 2" suona piuttosto concreto per me.
Ambra

@Amber: Accidenti a me, mi sono perso il no!

5
Va bene, non sto pubblicando questo come risposta perché non lo so , ma penso che quello che sta succedendo è gedit si rifiuta di iniziare una nuova partita immediatamente dopo la fine della partita precedente - salta un personaggio, qualunque esso sia , prima di provare di nuovo ad abbinare. Prova ad abbinare 11111e 22222.
zwol,

Risposte:


460

[0-9] non è sempre equivalente a \d. In python3, [0-9]corrisponde solo ai 0123456789caratteri, mentre \dcorrisponde [0-9]e altri caratteri numerici, ad esempio numeri arabi orientali ٠١٢٣٤٥٦٧٨٩.


3
Prova questo nel REPL: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')non mostra alcuna corrispondenza
nickf

1
@nickf provalo su python3.
mercoledì

2
Per persiano e arabo, nei motori java e javascript, usa \ p {Nd}
Alireza Fattahi,

6
+1, ma mmmm ... il tag dell'OP è Pythone \dcorrisponde a qualsiasi cifra Unicode solo in Python3. In Python 2.7 è ancora il vecchio ASCII [0-9], vale la pena chiarirlo nella risposta. :)
zx81,

1
@FarazAhmad, probabilmente no, devi specificare tutti i personaggi separatamente
Kirill Polishchuk,


8

In regex in stile Python, \dcorrisponde a qualsiasi singola cifra. Se stai vedendo qualcosa che non sembra farlo, ti preghiamo di fornire la regex completa che stai usando, invece di descrivere solo quel particolare simbolo.

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

Grazie! Il mio parser regex è un plugin di espressioni regolari in gedit. L'intero contenuto è 123.
Tim

7

\\d{3} corrisponde a qualsiasi sequenza di tre cifre in Java.


@ amal-murali, Come usare questa espressione per abbinare qualsiasi sequenza di cifre in Java.
hasan.alkhatib,

2
@HasanKhatib:\\d+
Amal Murali,

5

Questa è solo una supposizione, ma penso che il tuo editor corrisponda effettivamente a ogni singola cifra - 1 2 3- ma vengono evidenziate solo le corrispondenze dispari, per distinguerlo dal caso in cui l'intera 123stringa viene abbinata.

La maggior parte delle console regex evidenziano corrispondenze contigue con colori diversi, ma a causa delle impostazioni del plug-in, delle limitazioni del terminale o per qualche altro motivo, nel tuo caso potrebbe essere evidenziato solo ogni altro gruppo.


1

Informazioni su .NET / C #:

Carattere cifra decimale: \ d \ d corrisponde a qualsiasi cifra decimale. È equivalente al modello di espressione regolare \ p {Nd}, che include le cifre decimali standard 0-9 e le cifre decimali di un numero di altri set di caratteri.

Se viene specificato un comportamento conforme a ECMAScript, \ d equivale a [0-9]. Per informazioni sulle espressioni regolari di ECMAScript, consultare la sezione "Comportamento di corrispondenza ECMAScript" in Opzioni di espressioni regolari.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.