2017-07-19 11 views
6

के बीच मेल खाने वाले शब्द मैं अजगर में नियमित अभिव्यक्ति के साथ काफी सरल करने की कोशिश कर रहा हूं ... जो मैंने कम से कम सोचा था।नियमित अभिव्यक्ति: सफेद स्थान

मैं जो करना चाहता हूं वह स्ट्रिंग से शब्दों से मेल खाता है यदि उसके पहले और एक सफेद स्थान के बाद होता है। यदि स्ट्रिंग की शुरुआत में इसके पहले कोई सफेद जगह नहीं है - यदि अंत में, तो व्हाइटस्पेस की खोज न करें।

उदाहरण:

"WordA WordB WordC-WordD WordE" 

मैं WordA WordB WordE मिलान करना चाहते हैं।

मैं केवल ऐसा करने का overcomplicated रास्ता के साथ आया था ...

(?<=(?<=^)|(?<=\s))\w+(?=(?=\s)|(?=$)) 

मुझे ऐसा लगता है इस तरह के एक साधारण सी समस्या के लिए एक आसान तरीका हो गया है .... मैं सोचा मैं सिर्फ कर सकते हैं (?<=\s|^) से शुरू करें लेकिन यह संभव नहीं लगता है क्योंकि "लुक-बैक के लिए निश्चित-चौड़ाई पैटर्न की आवश्यकता है"।

उत्तर

6

आपको पाइथन में काम करना प्रतीत होता है क्योंकि (?<=^|\s) पीसीआरई, जावा और रूबी (और .NET regex अनंत चौड़ाई दिखने वाले पैटर्न का समर्थन करता है) में पूरी तरह से मान्य है।

उपयोग

(?<!\S)\w+(?!\S) 

यह 1 या अधिक शब्द वर्ण कि सफेद स्थान के साथ संलग्न या शुरू/स्ट्रिंग के अंत कर रहे हैं से मेल खाएगी।

regex demo देखें।

पैटर्न विवरण:

  • (?<!\S) - 1 या अधिक शब्द - एक नकारात्मक lookbehind कि इंजन एक बार मैच में विफल रहता है एक गैर-सफ़ेद चार तुरंत वर्तमान स्थान
  • \w+ के बाईं ओर पाता है वर्ण
  • (?!\S) - एक नकारात्मक लुकहेड जो इंजन को एक बार गैर-व्हाइटस्पेस चार को तुरंत वर्तमान स्थान के दाईं ओर पाता है।
+0

जो समझ में आता है! धन्यवाद। मुझे लगता है कि व्हाइटस्पेस के बजाय nonwhitespace के लिए खोज करना बहुत आसान है। – SyntaxError

+0

सुनिश्चित नहीं है कि यह आसान है, लेकिन अधिक कुशल है। –

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