2012-02-04 17 views
6

निम्न स्ट्रिंग को देखते हुए:अजगर regex मैच शाब्दिक तारांकन

s = 'abcdefg*' 

मैं इसे कैसे या किसी अन्य स्ट्रिंग केवल छोटे अक्षरों और वैकल्पिक एक तारक के साथ समाप्त होने से बना मिलान कर सकते हैं? मैंने सोचा था कि निम्नलिखित काम करेगा, लेकिन यह नहीं है:

re.match(r"^[a-z]\*+$", s) 

यह None और नहीं एक मैच वस्तु देता है।

उत्तर

13

मैं इसे कैसे कम कर सकता हूं या किसी अन्य स्ट्रिंग को केवल लोअरकेस अक्षरों से बना सकता हूं और वैकल्पिक रूप से तारांकन के साथ समाप्त हो सकता हूं?

निम्नलिखित यह करना होगा:

re.match(r"^[a-z]+[*]?$", s) 
  1. ^ स्ट्रिंग के शुरू होने से मेल खाता है।
  2. [a-z]+ एक या अधिक लोअरकेस अक्षरों से मेल खाता है।
  3. [*]? शून्य या एक तारांकन से मेल खाता है।
  4. $ स्ट्रिंग के अंत से मेल खाता है।

आपका मूल रेगेक्स एक या एक से अधिक तारों के बाद बिल्कुल एक लोअरकेस चरित्र से मेल खाता है।

4

\*? का मतलब है 0 या 1 तारांकन:

re.match(r"^[a-z]+\*?$", s) 
1

प्रयास करें

re.match(r"^[a-z]*\*?$", s) 

इसका मतलब है "शून्य या अधिक लोअरकेस वर्णों (इसलिए पहले तारांकन), मिलकर एक स्ट्रिंग शून्य या द्वारा पीछा किया एक तारांकन (बच निकले तार के बाद प्रश्न चिह्न)

आपका रेगेक्स का अर्थ है "बिल्कुल एक लोअरकेस चरित्र एक या अधिक तारों के बाद"

0

आप [ए-जेड] मैच के बाद + भूल गए हैं ताकि आप इंगित कर सकें कि आप उनमें से 1 या अधिक चाहते हैं (अभी यह केवल एक से मेल खाता है)।

re.match(r"^[a-z]+\*+$", s) 
2
re.match(r"^[a-z]+\*?$", s) 

[a-z]+ छोटे अक्षरों के अनुक्रम से मेल खाता है, और \*? एक वैकल्पिक शाब्दिक * chatacter मेल खाता है।

संबंधित मुद्दे