Normal ifadedeki "\ d" bir rakam anlamına mı geliyor?


147

O bulundu 123, \dkibrit 1ve 3ancak 2. Merak ediyordum da \dbir rakamla eşleşiyor mu, ne tür bir gereksinimi karşılıyor? Python tarzı regex'ten bahsediyorum.

Gedit'teki normal ifade eklentisi Python tarzı regex kullanıyor. İçeriği olan bir metin dosyası oluşturdum

123

Yalnızca 1ve 3normal ifadeyle eşleştirilir \d; 2değil.

Genel olarak, aralarında başka karakterlerin bulunmadığı bir rakam dizisi için, yalnızca tek sıra rakamları eşleşir ve çift sıra rakamları eşleşmez. Örneğin 12345içindeki eşleşmeler 1, 3ve 5.


4
\deşleşir 1, 2ve 3. Eğer değilse, ifadenizde başka bir şey olmalı. Tam ifadenizi gösterebilir misiniz?
Alex Aza

4
\dkısaltmasıdır [0-9], bu yüzden eşleşmesi gerekir 2. Lütfen eksiksiz bir test senaryosu (çalıştırılabilen, sorununuzu gösteren bir komut dosyası) gönderin ve belki sorunun ne olduğunu bulabiliriz.
zwol

@delnan: "123'te \ d'nin 1 ve 3 ile eşleştiğini ancak 2'nin eşleşmediğini" buldum bana oldukça somut geliyor.
Amber

@Amber: Kahretsin, notu kaçırdım!

5
Tamam, bunu bir cevap olarak göndermiyorum çünkü bilmiyorum , ama sanırım neler oluyor gedit önceki maçın bitiminden hemen sonra yeni bir maç başlatmayı reddediyor - her ne olursa olsun bir karakter atlıyor , tekrar eşleşmeye çalışmadan önce. Lütfen 11111ve eşleştirmeyi deneyin 22222.
zwol

Yanıtlar:


472

[0-9] Her zaman eşdeğer değildir için \d. Python3'te, [0-9]yalnızca 0123456789karakterlerle eşleşir , \deşleşmeler [0-9]ve diğer rakam karakterleri, örneğin Doğu Arap rakamları ٠١٢٣٤٥٦٧٨٩.


4
Bunu import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')
REPL'de

2
@nickf python3'te deneyin.
wim

2
Farsça ve Arapça için, java ve javascript motorlarında \ p {Nd} kullanın
Alireza Fattahi

6
1, ama mmmm ... OP'ın etikettir Pythonve \dherhangi bir Unicode sadece Python3 içinde parmaklara eşleşir. Python 2.7'de hala eski ASCII'dir [0-9]- yanıtta bunu açıklığa kavuşturmaya değer olabilir. :)
zx81

1
@FarazAhmad, muhtemelen hayır, tüm karakterleri ayrı ayrı belirtmeniz gerekiyor
Kirill Polishchuk

13

\dpython da dahil olmak üzere çoğu düzenli ifade dilbilgisi stilindeki herhangi bir tek rakamla eşleşir. Regex Referansı


8

Python tarzı normal ifadede, \dherhangi bir tek rakamla eşleşir. Bunu yapmıyor gibi görünen bir şey görüyorsanız , yalnızca belirli bir sembolü tanımlamanın aksine , lütfen kullandığınız tam normal ifadeyi sağlayın .

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

Teşekkürler! Normal ifade ayrıştırıcım, gedit'teki normal ifade eklentisidir. Tüm içerik 123.
Tim

7

\\d{3} Java'da üç basamaklı herhangi bir diziyle eşleşir.


@ amal-murali, Java'da herhangi bir rakam dizisini eşleştirmek için bu ifade nasıl kullanılır?
hasan.alkhatib

2
@HasanKhatib:\\d+
Amal Murali

5

Bu sadece bir tahmin, ancak editörünüzün aslında her bir rakamla eşleştiğini düşünüyorum - 1 2 3- ancak tüm 123dizenin eşleştiği durumdan ayırmak için yalnızca tek eşleşmeler vurgulanmıştır .

Çoğu normal ifade konsolu, farklı renklerle bitişik eşleşmeleri vurgular, ancak eklenti ayarları, terminal sınırlamaları veya başka bir nedenle, sizin durumunuzda yalnızca diğer tüm gruplar vurgulanabilir.


0

.NET / C # ile ilgili bilgiler:

Ondalık sayı karakteri: \ d \ d herhangi bir ondalık basamakla eşleşir. Standart ondalık sayılar 0-9'u ve diğer birkaç karakter kümesinin ondalık basamaklarını içeren \ p {Nd} normal ifade modeline eşdeğerdir.

ECMAScript uyumlu davranış belirtilirse, \ d [0-9] ile eşdeğerdir. ECMAScript normal ifadeleri hakkında bilgi için, Normal İfade Seçenekleri'ndeki "ECMAScript Eşleştirme Davranışı" bölümüne bakın.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.