जाँच करें कि क्या स्ट्रिंग पैटर्न से मेल खाता है


317

अगर कोई स्ट्रिंग इस पैटर्न से मेल खाता है तो मैं कैसे जांच करूं?

अपरकेस अक्षर, संख्या (ओं), अपरकेस अक्षर, संख्या (ओं) ...

उदाहरण, ये मेल खाते हैं:

A1B2
B10L1
C1N200J1

ये ('^' समस्या की ओर इशारा नहीं करेंगे)

a1B2
^
A10B
   ^
AB400
^

3
क्या आप अधिक बता सकते हैं कि यह एक समस्या क्यों है?
जॉन वू

4
^([A-Z]\d+){1,}$इस तरह?
राहगीर

आपके तीसरे उदाहरण में, समस्या साथ होनी चाहिए Bऔर साथ नहीं A
बुरहान खालिद

शायद यह समस्या पर एक टाइपो त्रुटि है। दोनों Aऔर Bछोटे अक्षर सही हैं? A10bऔर aB400?
जॉन वू

@ बुरहान, समस्या A के साथ है क्योंकि B के पास संख्याएँ हैं और A नहीं
DanielTA

जवाबों:


465
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)

संपादित करें: जैसा कि टिप्पणियों में उल्लेख किया गया है, matchकेवल स्ट्रिंग की शुरुआत में मैचों के लिए जाँच करता है, जबकि re.search()स्ट्रिंग में कहीं भी एक पैटर्न से मेल खाएगा। (यह भी देखें: https://docs.python.org/library/re.html#search-vs-match )


20
डॉक्स से पर re.match: If zero or more characters at the beginning of string match the regular expression pattern। मैंने सिर्फ 30 मिनट ऐसे बिताए कि मैं यह समझने की कोशिश करूं कि मैं एक स्ट्रिंग के अंत में कुछ मैच क्यों नहीं कर सकता। लगता है जैसे यह संभव नहीं है match, क्या यह है? उसके लिए, re.search(pattern, my_string)हालांकि काम करता है।
१६:१६

2
@conradk हाँ, आप सही कह रहे हैं, मुझे लगता है कि ^जब आप उपयोग करते हैं तो शुरुआत में कुछ निहित होता है match। मुझे लगता है कि यह थोड़ा और अधिक जटिल है, फिर बहुत ही सरल व्याख्या, लेकिन मैं स्पष्ट नहीं हूं। आप सही हैं कि यह स्ट्रिंग की शुरुआत से शुरू होता है।
१०:१० बजे क्राइस्टकास्ट

173

एक लाइन: re.match(r"pattern", string) # No need to compile

import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
...     print('Yes')
... 
Yes

आप इसे boolआवश्यकतानुसार विकसित कर सकते हैं

>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True

लापता import reपहली पंक्ति के रूप
अरोद

वह अजीब है। आप re.matchए के संदर्भ में क्यों उपयोग कर सकते हैं if, लेकिन boolअगर आपको इसे कहीं और इस्तेमाल करना है तो आपको इस्तेमाल करना होगा?
लंदनरोब

16
से सावधान re.match। यह केवल एक स्ट्रिंग की शुरुआत में मेल खाता है। re.searchइसके बजाय एक नजर है ।
लंदनरोब

@LondonRob शायद क्योंकि ifमैच नहीं होने के लिए जाँच करता है None
डेनिस

यह सुनिश्चित करने के लिए एक बड़ी आवश्यकता है कि नियमित अभिव्यक्तियों में कोई त्रुटि नहीं है जैसे कि खराब चरित्र श्रेणी की त्रुटियां
Suh Fangmbeng

36

कृपया निम्नलिखित प्रयास कीजिए:

import re

name = ["A1B1", "djdd", "B2C4", "C2H2", "jdoi","1A4V"]

# Match names.
for element in name:
     m = re.match("(^[A-Z]\d[A-Z]\d)", element)
     if m:
        print(m.groups())

1
यह एकमात्र मामला है जो उस समूह को लौटाता है जिसे समूह प्राप्त करने के लिए आवश्यक है। मेरी राय में सबसे अच्छा जवाब।
रिक स्मिथ 20


7

नियमित अभिव्यक्ति यह आसान बनाती है ...

[A-Z] A और Z के बीच ठीक एक वर्ण का मिलान करेगा

\d+ एक या अधिक अंकों से मेल खाएगा

() समूह चीजें (और चीजें भी वापस करें ... लेकिन अभी के लिए उन्हें समूह बनाने के बारे में सोचें)

+ 1 या अधिक का चयन करता है


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