2009-06-06 10 views
14

क्या अजगर में लंबे रेगेक्स पैटर्न लिखने का कोई क्लीनर तरीका है? मैंने कहीं इस दृष्टिकोण को देखा लेकिन पायथन में रेगेक्स सूचियों की अनुमति नहीं देता है।स्वच्छ पायथन नियमित अभिव्यक्ति

patterns = [ 
    re.compile(r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'), 
    re.compile(r'\n+|\s{2}') 
] 

उत्तर

25

आप अधिक पठनीय नियमित अभिव्यक्ति लिखने के लिए वर्बोज़ मोड का उपयोग कर सकते हैं। इस मोड में:

  • पैटर्न के भीतर व्हाइटस्पेस को अनदेखा किया जाता है, सिवाय इसके कि जब किसी चरित्र वर्ग में या अनचाहे बैकस्लैश से पहले।
  • जब किसी पंक्ति में '#' न तो किसी वर्ण वर्ग में या किसी अनचाहे बैकस्लैश से पहले, रेखा के अंत तक बाईं ओर से '#' के सभी वर्णों को अनदेखा किया जाता है।

निम्नलिखित दो बयान के बराबर हैं:

a = re.compile(r"""\d + # the integral part 
        \. # the decimal point 
        \d * # some fractional digits""", re.X) 

b = re.compile(r"\d+\.\d*") 

(verbose mode के प्रलेखन से लिया)

+3

यह इंगित करने लायक हो सकता है कि यह "re.X" है जिसका अर्थ वर्बोज़ मोड है जो "re.VERBOSE" लिखने के बराबर है। – Zitrax

2

आप regex के है, जो उन्हें और अधिक पठनीय बनाने में टिप्पणियों का उपयोग कर सकते हैं। http://gnosis.cx/publish/programming/regular_expressions.html से एक उदाहरण लेते हुए:,

/    # identify URLs within a text file 
      [^="] # do not match URLs in IMG tags like: 
       # <img src="http://mysite.com/mypic.png"> 
http|ftp|gopher # make sure we find a resource type 
      :\/\/ # ...needs to be followed by colon-slash-slash 
     [^ \n\r]+ # stuff other than space, newline, tab is in URL 
    (?=[\s\.,]) # assert: followed by whitespace/period/comma 
/
+0

... जब तक आप उन्हें Ayman के सुझाव के अनुसार re.VERBOSE के साथ संकलित करते हैं। –

13

हालांकि @ अयमान के सुझाव के बारे में re.VERBOSE एक बेहतर विचार है अगर सभी आप चाहते है कि तुम क्या दिखा रहे हैं, बस कार्य करें:

patterns = re.compile(
     r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>' 
     r'\n+|\s{2}' 
) 

और की पायथन के स्वत: संयोजन आसन्न स्ट्रिंग अक्षर (सी की तरह, बीटीडब्ल्यू) बाकी करेंगे ;-)।

+1

यह पाइथन की ऑटो-कॉन्सटेनेशन होगा जो पाइथन की ऑटो लाइन-ब्रैकेट और पैरों के बीच जुड़ने के साथ जुड़ा हुआ है। – Triptych

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