2012-12-19 13 views
8

पैटर्न (?<!(asp|php|jsp))\?.* पीसीआरई में काम करता है, लेकिन यह पायथन में काम नहीं करता है।पायथन रेगेक्स नकारात्मक लुकबींड

तो पाइथन में यह रेगेक्स काम करने के लिए मैं क्या कर सकता हूं? (पायथन 2.7)

+6

यह कैसे काम नहीं करता है? क्या यह एक त्रुटि देता है? यदि ऐसा है, तो त्रुटि पोस्ट करें। क्या आप इसकी अपेक्षा से मेल नहीं खाते हैं? यदि ऐसा है, तो उस कोड को पोस्ट करें जहां आप इसका उपयोग करते हैं और आउटपुट दिखाते हैं जो आप बनाते हैं। आप क्या उम्मीद करते हैं। – BrenBarn

+0

फिर से मॉड्यूल के लिए [doc] (http://docs.python.org/2/library/re.html) है, स्पष्ट रूप से नकारात्मक दिखने वाले अनुमानों का राज्य समर्थन। –

+3

नकारात्मक दिखने तब तक काम करते हैं जब तक कि सभी विकल्पों में समान लंबाई न हो। तो यह '(? georg

उत्तर

9

यह मेरे लिए बिल्कुल ठीक काम करता है। क्या आप शायद इसे गलत इस्तेमाल कर रहे हैं? re.match के बजाय re.search उपयोग करना सुनिश्चित करें:

>>> import re 
>>> s = 'somestring.asp?1=123' 
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s) 
>>> s = 'somestring.xml?1=123' 
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s) 
<_sre.SRE_Match object at 0x0000000002DCB098> 

कौन सा ठीक है कि कैसे अपने पैटर्न व्यवहार करना चाहिए। जैसा कि glglgl का उल्लेख है, यदि आप Match ऑब्जेक्ट को एक चर (m कहें) निर्दिष्ट करते हैं तो आप मैच प्राप्त कर सकते हैं और फिर m.group() पर कॉल करें। इससे ?1=123 उत्पन्न होता है।

वैसे, आप आंतरिक कोष्ठक छोड़ सकते हैं। यह पैटर्न बराबर है:

(?<!asp|php|jsp)\?.* 
+1

कर सकता है ... और 're.search (r" (? glglgl

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