क्या यह निर्धारित करने का कोई तरीका है कि किसी नियमित नियमित अभिव्यक्ति में कितने कैप्चर समूह हैं?पायथन नियमित अभिव्यक्तियों में कैप्चर समूहों की संख्या जानें
मैं follwing ऐसा करने में सक्षम होना चाहते हैं:
def groups(regexp, s):
""" Returns the first result of re.findall, or an empty default
>>> groups(r'(\d)(\d)(\d)', '123')
('1', '2', '3')
>>> groups(r'(\d)(\d)(\d)', 'abc')
('', '', '')
"""
import re
m = re.search(regexp, s)
if m:
return m.groups()
return ('',) * num_of_groups(regexp)
यह मेरे जैसे सामान करने के लिए अनुमति देता है:
first, last, phone = groups(r'(\w+) (\w+) ([\d\-]+)', 'John Doe 555-3456')
हालांकि, मैं num_of_groups
लागू करने के लिए कैसे पता नहीं है। (वर्तमान में मैं सिर्फ उसके चारों ओर काम करते हैं।)
संपादित करें:advice from rslite के बाद, मैं re.search
साथ re.findall
बदल दिया।
sre_parse
सबसे मजबूत और व्यापक समाधान की तरह लगता है, लेकिन पेड़ के ट्रैवर्सल की आवश्यकता है और यह थोड़ा भारी प्रतीत होता है।
मिज़र्डएक्स की नियमित अभिव्यक्ति सभी अड्डों को कवर करने लगती है, इसलिए मैं इसके साथ जा रहा हूं।
यह वास्तव में समूहों की संख्या वापस नहीं करेगा, यह सभी समूहों का एक टुपल लौटाएगा। समूहों की संख्या वापस करने के लिए, आपको निम्न कोड (पायथन 3.4 में) की आवश्यकता होगी: 'रिटर्न लेन (re.compile (regex)। समूह()) ' –
@RaziShaban' re.compile (regex)। समूह '' int' प्रकार की संपत्ति है। 're.compile (regex) .match (इनपुट)। समूह()' एक विधि है, जो 'tuple' लौटा रहा है। –
सही, क्षमा करें, मैं खोज के साथ काम कर रहा था, संकलित नहीं। प्वाइंट मैं बना रहा था कि आपके फ़ंक्शन को 'num_groups' नाम दिया गया है लेकिन एक टुपल देता है, संख्या नहीं। –