«\ D» dans regex signifie-t-il un chiffre?

147

J'ai trouvé ça dans 123, \dcorrespond 1et 3mais pas 2. Je me demandais si \dcorrespond à un chiffre satisfaisant quel type d'exigence? Je parle de regex de style Python.

Le plugin d'expression régulière dans Gedit utilise l'expression régulière de style Python. J'ai créé un fichier texte dont le contenu est

123

Seulement 1et 3sont mis en correspondance par l'expression rationnelle \d; 2n'est pas.

Généralement, pour une séquence de nombres de chiffres sans autres caractères entre les deux, seuls les chiffres d'ordre impair sont des correspondances, et les chiffres d'ordre pair ne le sont pas. Par exemple dans 12345, les correspondances sont 1, 3et 5.

Tim
la source
4
\dcorrespondra 1, 2et 3. Si ce n'est pas le cas, il doit y avoir autre chose dans votre expression. Pouvez-vous montrer votre pleine expression?
Alex Aza
4
\dest un raccourci pour [0-9], donc il doit correspondre 2. Veuillez publier un cas de test complet (un script qui peut être exécuté, qui démontre votre problème) et peut-être que nous pourrons comprendre ce qui ne va pas.
zwol
@delnan: "J'ai trouvé qu'en 123, \ d correspond à 1 et 3 mais pas à 2" me semble assez concret.
Amber
@Amber: Merde moi, j'ai raté le pas!
5
D'accord, je ne poste pas cela comme réponse parce que je ne sais pas , mais je pense que ce qui se passe, c'est que gedit refuse de commencer un nouveau match immédiatement après la fin du match précédent - il saute un personnage, quel qu'il soit , avant d'essayer à nouveau de correspondre. Veuillez essayer de faire correspondre 11111et 22222.
zwol

Réponses:

460

[0-9] n'est pas toujours équivalent à \d. Dans python3, [0-9]correspond uniquement aux 0123456789caractères, tandis que les \dcorrespondances [0-9]et autres caractères numériques, par exemple les chiffres arabes de l'Est ٠١٢٣٤٥٦٧٨٩.

Kirill Polishchuk
la source
3
Essayer ceci dans la REPL: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')ne montre aucun match
nickf
1
@nickf essayez-le sur python3.
wim
2
Pour le persan et l'arabe, dans les moteurs java et javascript, utilisez \ p {Nd}
Alireza Fattahi
6
+1, mais mmmm ... la balise de l'OP est Pythonet \dcorrespond à tous les chiffres Unicode uniquement en Python3. Dans Python 2.7, c'est toujours l'ancien ASCII [0-9]- cela pourrait valoir la peine d'être clarifié dans la réponse. :)
zx81
1
@FarazAhmad, probablement pas, vous devez spécifier tous les caractères séparément
Kirill Polishchuk
13

\dcorrespond à n'importe quel chiffre dans la plupart des styles de grammaire regex, y compris python. Référence Regex

Volonté
la source
8

Dans l'expression régulière de style Python, \dcorrespond à n'importe quel chiffre individuel. Si vous voyez quelque chose qui ne semble pas faire cela, veuillez fournir le regex complet que vous utilisez, plutôt que de simplement décrire ce symbole particulier.

>>> 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>
ambre
la source
Merci! Mon analyseur de regex est un plugin d'expression régulière dans gedit. Tout le contenu est 123.
Tim
7

\\d{3} correspond à n'importe quelle séquence de trois chiffres en Java.

Srajan
la source
@ amal-murali, Comment utiliser cette expression pour faire correspondre n'importe quelle séquence de chiffres en java.
hasan.alkhatib
2
@HasanKhatib:\\d+
Amal Murali
5

Ce n'est qu'une supposition, mais je pense que votre éditeur correspond en fait à chaque chiffre - 1 2 3- mais seules les correspondances impaires sont mises en évidence, pour le distinguer du cas où la 123chaîne entière est mise en correspondance.

La plupart des consoles regex mettent en évidence des correspondances contiguës avec des couleurs différentes, mais en raison des paramètres du plugin, des limitations du terminal ou pour une autre raison, seul tous les autres groupes peuvent être mis en évidence dans votre cas.

Niche87
la source
1

Informations concernant .NET / C #:

Caractère décimal: \ d \ d correspond à n'importe quel chiffre décimal. Il est équivalent au modèle d'expression régulière \ p {Nd}, qui inclut les chiffres décimaux standard 0-9 ainsi que les chiffres décimaux d'un certain nombre d'autres jeux de caractères.

Si un comportement conforme à ECMAScript est spécifié, \ d équivaut à [0-9]. Pour plus d'informations sur les expressions régulières ECMAScript, consultez la section "Comportement de correspondance ECMAScript" dans Options des expressions régulières.

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

juFo
la source