Чи означає «\ d» у регулярному виразі цифру?


147

Я виявив , що в 123, \dсірники 1і , 3але не 2. Мені було цікаво, чи \dвідповідає цифра, яка задовольняє які вимоги? Я говорю про стилю Python стилю.

Плагін регулярного вираження в Gedit використовує регулярний вираз стилю Python. Я створив текстовий файл із його вмістом

123

Тільки 1і 3узгоджуються регулярним виразом \d; 2не.

Як правило, для послідовності цифр чисел без інших символів між ними, лише непарні порядки - це відповідність, а парні цифри порядку - не. Наприклад , в 12345, сірники 1, 3і 5.


4
\dбуде відповідати 1, 2і 3. Якщо цього немає, у вашому вираженні має бути щось інше. Чи можете ви показати свій повний вираз?
Алекс Аза

4
\dце скорочення [0-9], тому воно повинно відповідати 2. Будь ласка, опублікуйте повний тестовий випадок (сценарій, який можна запустити, який демонструє вашу проблему), і, можливо, ми зможемо з’ясувати, що не так.
zwol

@delnan: "Я виявив, що у 123, \ d відповідає 1 і 3, але не 2" звучить для мене досить конкретно.
Бурштин

@Amber: Чорт за мною, я пропустив не!

5
Гаразд, я не публікую це як відповідь, тому що не знаю , але думаю, що відбувається - gedit відмовляється починати новий матч відразу після закінчення попереднього матчу - він пропускає одного персонажа, що б він не був , перш ніж повторити спробу. Спробуйте відповідати 11111і 22222.
zwol

Відповіді:


459

[0-9] не завжди еквівалентна до \d. У python3 [0-9]збігаються лише 0123456789символи, тоді як \dзбіги [0-9]та інші цифри, наприклад, східноарабські цифри ٠١٢٣٤٥٦٧٨٩.


3
Спробуйте це у відповіді: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')не показує матчу
nickf

1
@nickf спробуйте на python3.
Вім

2
Для перської та арабської мов у двигунах java та
javasv

6
+1, але мммм ... тег OP є Pythonі \dвідповідає будь-яким цифрам Unicode лише в Python3. У Python 2.7 це ще старий ASCII [0-9]- це, можливо, варто уточнити у відповіді. :)
zx81

1
@FarazAhmad, напевно, ні, вам потрібно вказати всі символи окремо
Кирило Поліщук

13

\dвідповідає будь-якій однозначній цифрі в більшості стилів граматики з регулярними виразками, включаючи пітон. Довідник Regex


8

У регулярному вираженні стилю Python \dвідповідає будь-якій окремій цифрі. Якщо ви бачите щось, що, схоже, не робить цього, введіть повний регулярний вираз, який ви використовуєте, а не просто описувати цей конкретний символ.

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

Дякую! Мій аналізатор регулярних виразів - це плагін регулярного вираження в gedit. Весь зміст є 123.
Тім

7

\\d{3} відповідає будь-якій послідовності з трьох цифр на Яві.


@ amal-murali, Як використовувати цей вираз, щоб відповідати будь-якій послідовності цифр у Java.
hasan.alkhatib

2
@HasanKhatib:\\d+
Амаль Муралі

5

Це лише здогадка, але я думаю, що ваш редактор насправді відповідає кожній окремій цифрі - 1 2 3- але виділяються лише непарні збіги, щоб відрізнити це від випадку, коли 123узгоджується весь рядок.

Більшість консолей регулярного вибору виділяють суміжні збіги різними кольорами, але через налаштування плагінів, обмеження терміналів або з якоїсь іншої причини у вашому випадку може бути виділена лише кожна інша група.


1

Інформація про .NET / C #:

Десяткова цифра символу: \ d \ d відповідає будь-якій десятковій цифрі. Він еквівалентний шаблону регулярного вираження \ p {Nd}, який включає стандартні десяткові цифри 0-9, а також десяткові цифри ряду інших наборів символів.

Якщо визначено сумісну з ECMAScript поведінку, \ d еквівалентно [0-9]. Для отримання інформації про регулярні вирази ECMAScript див. Розділ «Поведінка відповідності ECMAScript» у розділі Параметри регулярного вираження.

Інформація: https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#decimal-digit-character-d

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.