2015-01-14 3 views
6

मान लें निम्नलिखित शब्द, लेकिन बीएलए जो सबसे करीब देखने के लिए है। अर्थात। मैंRegex, करीबी मिलान अनुक्रम</p> <pre><code>BLA text text text text text text BLA text text text text LOOK text text text BLA text text BLA </code></pre> <p>मुझे क्या करना चाहते हैं देखने के लिए बीएलए से पाठ निकाल रहा है का चयन

BLA text text text text LOOK 

नियमित अभिव्यक्तियों का उपयोग करके मुझे यह कैसे करना चाहिए? मुझे एक समाधान मिला जो काम करता है, लेकिन जो बेहद अक्षम है।

BLA(?!.*?BLA.*?LOOK).*?LOOK 

क्या इस पैटर्न से मेल खाने के लिए एक बेहतर और अधिक प्रदर्शन करने वाला तरीका है?

मैं क्या करना चाहता हूं: मैं बीएलए से मेल खाना चाहता हूं, फिर लुक के साथ सकारात्मक फॉरवर्ड लुकहेड या बीएलए के साथ नकारात्मक लुकहेड तक आगे देखो। लेकिन मुझे इसे नियमित अभिव्यक्ति में रखने का कोई तरीका नहीं पता है।

एक इंजन के रूप में मैं पाइथन में फिर से उपयोग करता हूं।

उत्तर

7
BLA(?:(?!BLA).)*?LOOK 

this.See डेमो का प्रयास करें देखने के लिए और बीएलए के बीच पाठ पाते हैं।

https://regex101.com/r/fA6wE2/12

या

BLA(?:(?!BLA|LOOK).)*?LOOK 

सुरक्षित होने के लिए।

0

बस बीएलए

बिना
In : re.search(r'BLA [^(BLA)]+ LOOK', 'BLA text text text text text text BLA text text text text LOOK text text text BLA text text BLA').group() 
Out: 'BLA text text text text LOOK' 

:-)

+0

ओह ... यह इतना आसान होगा :-) धन्यवाद! – overseas

+0

समस्या यह है: यदि मैं अभिव्यक्ति का उपयोग करता हूं तो यह काम नहीं करता है उदा। बीएलए टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट बीएलए टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट टेक्स्ट बीएलए इसलिए यदि बीएलए और लुक – overseas

+0

के बीच कोई एल है तो मुझे लगता है कि आपको नियमित अभिव्यक्ति ज्ञान को संशोधित करने की आवश्यकता है। Becuase '[^ (बीएलए)] +' का मतलब है कि यह 'बीएलए' से मेल नहीं खाएगा बल्कि यह 'बी' या' ('या' एल' आदि – nu11p01n73R

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