क्या regex में "d" का अर्थ एक अंक है?


147

मैंने पाया है कि में 123, \dमैचों 1और 3नहीं बल्कि 2। में सोच रहा था अगर\d क्या एक अंक संतोषजनक है जो आवश्यकता है? मैं पायथन स्टाइल रेगेक्स के बारे में बात कर रहा हूं।

गेडिट में नियमित अभिव्यक्ति प्लगइन पायथन शैली regex का उपयोग कर रहा है। मैंने इसकी सामग्री के साथ एक पाठ फ़ाइल बनाई

123

केवल 1और 3regex द्वारा मेल खाते हैं \d; 2नहीं है।

आम तौर पर बीच में अन्य वर्णों के बिना अंकों की संख्या के अनुक्रम के लिए, केवल विषम क्रम अंक मैच होते हैं, और यहां तक ​​कि क्रम अंक भी नहीं होते हैं। उदाहरण के लिए 12345, मैच हैं 1, 3और 5


4
\dमैच होगा 1, 2और 3। यदि यह नहीं है तो आपकी अभिव्यक्ति में कुछ और होना चाहिए। क्या आप अपनी पूरी अभिव्यक्ति दिखा सकते हैं?
एलेक्स आजा

4
\dके लिए आशुलिपि है [0-9], इसलिए इसे मिलान करना चाहिए 2। कृपया एक पूर्ण परीक्षण मामला (एक स्क्रिप्ट जिसे चलाया जा सकता है, जो आपकी समस्या को प्रदर्शित करता है) पोस्ट करें और हो सकता है कि हम यह पता लगा सकें कि क्या गलत है।
zwol

@delnan: "मैंने पाया कि 123 में, d 1 और 3 मैच करता है, लेकिन 2 नहीं" मुझे बहुत ठोस लगता है।
अंबर

@ एम्बर: धिक्कार है, मुझे याद नहीं!

5
ठीक है, मैं इसे एक उत्तर के रूप में पोस्ट नहीं कर रहा हूं क्योंकि मुझे नहीं पता , लेकिन मुझे लगता है कि जो चल रहा है वह पिछले मैच के अंत के तुरंत बाद एक नया मैच शुरू करने से इंकार कर रहा है - यह एक चरित्र को छोड़ देता है, जो भी हो , फिर से मैच करने की कोशिश करने से पहले। मिलान करने का प्रयास करें 11111और 22222
zwol

जवाबों:


459

[0-9] हमेशा के बराबर नहीं है \d। Python3 में, [0-9]केवल 0123456789वर्णों का मिलान करता है, जबकि \dमिलान करता है[0-9] और अन्य अंक वर्ण, उदाहरण के लिए पूर्वी अरबी अंक ٠١٢٣٤٥٦٧٨٩


3
REPL में यह कोशिश करना: import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')कोई मैच नहीं दिखाता है
निक

1
@nickf इसे python3 पर आज़माएं।
विम

2
फ़ारसी और अरबी के लिए, जावा और जावास्क्रिप्ट इंजनों में, \ p {Nd}
Alireza Fattahi

6
+1, लेकिन एमएमएमएम ... ओपी का टैग है Pythonऔर \dकेवल पायथन 3 में किसी भी यूनिकोड अंक से मेल खाता है। पायथन 2.7 में यह अभी भी पुराना है ASCII- [0-9]यह जवाब में स्पष्ट करने लायक हो सकता है। :)
zx81

1
@ फराजअहमद, शायद नहीं, आपको सभी पात्रों को अलग
किरिल


8

पायथन-शैली के रेगेक्स में, \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>

धन्यवाद! मेरा regex parser नियमित अभिव्यक्ति प्लगइन gedit में है। पूरी सामग्री है 123
टिम

7

\\d{3} जावा में तीन अंकों के किसी भी क्रम से मेल खाता है।


@ अमल-मुरली, जावा में अंकों के किसी भी क्रम से मेल खाने के लिए इस अभिव्यक्ति का उपयोग कैसे करें।
hasan.alkhatib

2
@ हसनकिताब:\\d+
अमल मुरली

5

यह केवल एक अनुमान है, लेकिन मुझे लगता है कि आपका संपादक वास्तव में हर एक अंक से मेल खाता है - 1 2 3- लेकिन केवल अजीब मैच हाइलाइट किए जाते हैं, इसे मामले से अलग करने के लिए जब पूरे 123स्ट्रिंग का मिलान किया जाता है।

अधिकांश रेगेक्स कंसोल अलग-अलग रंगों के साथ सन्निहित मेलों को उजागर करते हैं, लेकिन प्लगइन सेटिंग्स, टर्मिनल सीमाओं या किसी अन्य कारण से, केवल आपके मामले में हर दूसरे समूह को हाइलाइट किया जा सकता है।


1

.NET / C # के बारे में जानकारी:

दशमलव अंक: \ d \ d किसी भी दशमलव अंक से मेल खाता है। यह \ p {Nd} नियमित अभिव्यक्ति पैटर्न के बराबर है, जिसमें मानक दशमलव अंक 0-9 और साथ ही कई अन्य वर्ण सेटों के दशमलव अंक शामिल हैं।

यदि ECMAScript-compliant व्यवहार निर्दिष्ट किया गया है, तो \ d [0-9] के बराबर है। ECMAScript नियमित अभिव्यक्तियों के बारे में जानकारी के लिए, नियमित अभिव्यक्ति विकल्पों में "ECMAScript मिलान व्यवहार" अनुभाग देखें।

जानकारी: https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in- अनियमित-expressions#decimal-digit-character-d

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.