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

Ответы:


460

[0-9] не всегда эквивалентна к \d. В python3 [0-9]соответствует только 0123456789символам, а \dсоответствует [0-9]и другим цифровым символам, например восточно-арабским цифрам ٠١٢٣٤٥٦٧٨٩.


3
Попытка сделать это в REPL: не import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')показывает совпадений
nickf

1
@nickf попробуй это на python3.
Вим

2
Для персидского и арабского языков, в java и javascript движках, используйте \ p {Nd}
Алиреза Фаттахи

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

1
@FarazAhmad, вероятно, нет, все символы нужно указывать отдельно
Кирилл Полищук

13

\dсоответствует любой единственной цифре в большинстве стилей грамматики регулярных выражений, включая python. Regex Reference


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} соответствует любой последовательности из трех цифр в Java.


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