Apakah "\ d" dalam regex berarti angka?

147

Saya menemukan bahwa dalam 123, \dcocok 1dan 3tetapi tidak 2. Saya bertanya-tanya apakah \dcocok dengan angka yang memenuhi persyaratan seperti apa? Saya berbicara tentang regex gaya Python.

Plugin ekspresi reguler di Gedit menggunakan regex gaya Python. Saya membuat file teks dengan isinya

123

Hanya 1dan 3dicocokkan oleh regex \d; 2tidak.

Umumnya untuk urutan nomor digit tanpa karakter lain di antaranya, hanya digit urutan ganjil yang cocok, dan digit urutan genap tidak. Misalnya dalam 12345, kecocokannya adalah 1, 3dan 5.

Tim
sumber
4
\dakan cocok 1, 2dan 3. Jika tidak, pasti ada sesuatu yang lain dalam ekspresi Anda. Bisakah Anda menunjukkan ekspresi penuh Anda?
Alex Aza
4
\dadalah singkatan [0-9], jadi itu harus cocok 2. Silakan kirim test case lengkap (skrip yang dapat dijalankan, yang menunjukkan masalah Anda) dan mungkin kami bisa mencari tahu apa yang salah.
zwol
@delnan: "Saya menemukan bahwa di 123, cocok dengan 1 dan 3 tetapi tidak 2" terdengar sangat konkret bagi saya.
Amber
@ Ammber: Sial, aku merindukan tidak!
5
Oke, saya tidak memposting ini sebagai jawaban karena saya tidak tahu , tapi saya pikir apa yang terjadi adalah gedit menolak untuk memulai pertandingan baru segera setelah akhir pertandingan sebelumnya - itu melompati satu karakter, apa pun itu , sebelum mencoba mencocokkan lagi. Silakan coba pencocokan 11111dan 22222.
zwol

Jawaban:

460

[0-9] tidak selalu sama dengan \d. Dalam python3, [0-9]hanya cocok 0123456789karakter, sedangkan \dcocok [0-9]dan karakter digit lainnya, misalnya angka Arab Timur ٠١٢٣٤٥٦٧٨٩.

Kirill Polishchuk
sumber
3
Mencoba ini di REPL: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')tidak menunjukkan kecocokan
nickf
1
@nickf coba di python3.
wim
2
Untuk bahasa Persia dan Arab, di mesin java dan javascript, gunakan \ p {Nd}
Alireza Fattahi
6
+1, tapi mmmm ... tag OP adalah Pythondan \dcocok dengan setiap digit Unicode hanya di Python3. Dalam Python 2.7 itu masih ASCII lama [0-9]- itu bisa bernilai menjelaskan itu dalam jawabannya. :)
zx81
1
@FarazAhmad, mungkin tidak, Anda harus menentukan semua karakter secara terpisah
Kirill Polishchuk
13

\dcocok dengan satu digit dalam kebanyakan gaya tata bahasa regex, termasuk python. Referensi Regex

Akan
sumber
8

Dalam regex gaya Python, \dcocok dengan digit individu mana pun. Jika Anda melihat sesuatu yang tampaknya tidak melakukan itu, berikan regex lengkap yang Anda gunakan, bukan hanya menggambarkan satu simbol tertentu.

>>> 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>
Amber
sumber
Terima kasih! Parser regex saya adalah plugin ekspresi reguler di gedit. Seluruh konten 123.
Tim
7

\\d{3} cocok dengan urutan tiga digit apa pun di Jawa.

srajan
sumber
@ amal-murali, Cara menggunakan ungkapan ini untuk mencocokkan urutan angka apa pun di java.
hasan.alkhatib
2
@HasanKhatib:\\d+
Amal Murali
5

Ini hanya dugaan, tetapi saya pikir editor Anda benar-benar cocok dengan setiap digit tunggal - 1 2 3- tetapi hanya kecocokan aneh yang disorot, untuk membedakannya dari kasing ketika seluruh 123string cocok.

Sebagian besar konsol regex menyorot pertandingan yang berdekatan dengan warna yang berbeda, tetapi karena pengaturan plugin, batasan terminal atau karena alasan lain, hanya setiap grup lain yang mungkin disorot dalam casing Anda.

Rumah Anjing87
sumber
1

Info tentang .NET / C #:

Karakter angka desimal: \ d \ d cocok dengan angka desimal apa pun. Ini sama dengan pola ekspresi reguler \ p {Nd}, yang mencakup angka desimal standar 0-9 serta angka desimal dari sejumlah set karakter lainnya.

Jika perilaku yang mematuhi ECMAScript ditentukan, \ d setara dengan [0-9]. Untuk informasi tentang ekspresi reguler ECMAScript, lihat bagian "Perilaku Pencocokan ECMAScript" di Opsi Ekspresi Reguler.

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

juFo
sumber