Czy „\ d” w wyrażeniu regularnym oznacza cyfrę?


147

Znalazłem to w 123, \dpasuje 1i 3ale nie 2. Zastanawiałem się, czy \dpasuje do cyfry spełniającej jakie wymagania? Mówię o wyrażeniu regularnym w stylu Pythona.

Wtyczka wyrażeń regularnych w Gedit używa wyrażenia regularnego w stylu Pythona. Utworzyłem plik tekstowy z zawartością

123

Tylko 1i 3są dopasowywane przez wyrażenie regularne \d; 2nie jest.

Generalnie w przypadku sekwencji cyfr bez innych znaków pomiędzy nimi, tylko nieparzyste cyfry kolejności są zgodne, a parzyste cyfry nie są. Na przykład w 12345, mecze są 1, 3i 5.


4
\dbędzie pasować 1, 2a 3. Jeśli tak nie jest, twoje wyrażenie musi zawierać coś innego. Czy możesz pokazać swoją pełną ekspresję?
Alex Aza,

4
\djest skrótem [0-9], więc powinno pasować 2. Prześlij kompletny przypadek testowy (skrypt, który można uruchomić i który demonstruje Twój problem), a może uda nam się dowiedzieć, co jest nie tak.
zwol

@delnan: „Odkryłem, że w 123 \ d pasuje 1 i 3, ale nie 2” brzmi dla mnie dość konkretnie.
Bursztynowy

@Amber: Cholera, przegapiłem nie!

5
Okej, nie zamieszczam tego jako odpowiedzi, bo nie wiem , ale myślę, że to, co się dzieje, to gedit odmawia rozpoczęcia nowego meczu natychmiast po zakończeniu poprzedniego meczu - pomija jeden znak, cokolwiek to jest , zanim spróbujesz ponownie dopasować. Spróbuj dopasować 11111i 22222.
zwol

Odpowiedzi:


459

[0-9] nie zawsze jest równoważne do \d. W pythonie3 [0-9]dopasowuje tylko 0123456789znaki, podczas gdy \ddopasowuje [0-9]i inne znaki cyfrowe, na przykład cyfry wschodnioarabskie ٠١٢٣٤٥٦٧٨٩.


3
Próbuję tego w REPL: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')pokazuje brak dopasowania
nickf

1
@nickf wypróbuj na python3.
wim

2
W przypadku języka perskiego i arabskiego, w silnikach java i javascript użyj \ p {Nd}
Alireza Fattahi

6
+1, ale mmmm ... znacznik OP jest Pythoni \dpasuje do wszystkich cyfr Unicode tylko w Pythonie3. W Pythonie 2.7 jest to wciąż stary ASCII [0-9]- warto byłoby to wyjaśnić w odpowiedzi. :)
zx81

1
@FarazAhmad, chyba nie, trzeba osobno określić wszystkie znaki
Kirill Polishchuk


8

W wyrażeniu regularnym w stylu Pythona \ddopasowuje każdą pojedynczą cyfrę. Jeśli widzisz coś, co wydaje się tego nie robić, podaj pełne wyrażenie regularne, którego używasz, zamiast opisywania tylko tego jednego symbolu.

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

Dzięki! Mój parser regex to wtyczka wyrażeń regularnych w gedit. Cała zawartość jest 123.
Tim

7

\\d{3} pasuje do dowolnej sekwencji trzech cyfr w języku Java.


@ amal-murali, Jak używać tego wyrażenia, aby dopasować dowolną sekwencję cyfr w java.
hasan.alkhatib

2
@HasanKhatib:\\d+
Amal Murali

5

To tylko przypuszczenie, ale myślę, że twój edytor faktycznie dopasowuje każdą pojedynczą cyfrę - 1 2 3- ale podświetlane są tylko nieparzyste dopasowania, aby odróżnić je od przypadku, gdy całość123 dopasowany jest ciąg.

Większość konsol regex wyróżnia ciągłe dopasowania różnymi kolorami, ale ze względu na ustawienia wtyczek, ograniczenia terminala lub z jakiegoś innego powodu, w twoim przypadku może być podświetlona tylko każda inna grupa.


1

Informacje dotyczące .NET / C #:

Znak cyfry dziesiętnej: \ d \ d odpowiada dowolnej cyfrze dziesiętnej. Odpowiada wzorowi wyrażenia regularnego \ p {Nd}, który zawiera standardowe cyfry dziesiętne 0–9, a także cyfry dziesiętne szeregu innych zestawów znaków.

Jeśli określono zachowanie zgodne z ECMAScript, \ d jest równoważne z [0-9]. Aby uzyskać informacje na temat wyrażeń regularnych ECMAScript, zobacz sekcję „Zachowanie dopasowania ECMAScript” w sekcji Opcje wyrażeń regularnych.

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.