2011-06-05 5 views
7

कहें कि मेरे पास foobar fooBAR FOObar FOOBAR युक्त स्ट्रिंग है, और मैं एक केस असंवेदनशील "foo" या "FOO" लेकिन एक लोअरकेस "बार" वाले सभी उदाहरणों को खोजना चाहता हूं। इस मामले में, re.findall['foobar', 'FOObar'] वापस करना चाहिए।पायथन रेगेक्स पैटर्न के एक हिस्से के अंदर केस को अनदेखा कैसे कर सकता है लेकिन पूरी अभिव्यक्ति नहीं?

this question के लिए स्वीकृत उत्तर बताता है कि यह (?i)foo(?-i)bar के साथ सी # में किया जा सकता है, लेकिन पायथन एक अमान्य अभिव्यक्ति त्रुटि उठाता है।

क्या पाइथन रेगेक्स लाइब्रेरी ऐसी सुविधा का समर्थन करता है?

+0

क्या FoObar' के बारे में '? –

+0

@ डोनल फैलो: हाँ, यह भी संभव है, लेकिन मेरे आवेदन में पूरी तरह से अपरकेस या पूरी तरह से लोअरकेस "foo" के रूप में सामान्य नहीं है। एक संभावना है कि उन दो मामलों के लिए कम से कम सही समाधान और परीक्षण लागू करना होगा। – Vortico

उत्तर

3

फिर मॉड्यूल दायरे वाले झंडे का समर्थन नहीं करता है, लेकिन वहाँ एक विकल्प regex कार्यान्वयन जो करता है:

http://pypi.python.org/pypi/regex

+0

यह बहुत अच्छा काम करता है! धन्यवाद। – Vortico

5

पायथन उसी तरह से ध्वज अक्षम करने का समर्थन नहीं करता है; आपको इसे अलग-अलग संभालना होगा।

>>> re.match('[Ff][Oo]{2}bar', 'Foobar') 
<_sre.SRE_Match object at 0x7eff94dac920> 
+0

मैं उस समाधान से डर रहा था, लेकिन यह काम कर सकता है। आवेदन में, "foo" (केस असंवेदनशील भाग) को एक मनमानी स्ट्रिंग द्वारा प्रतिस्थापित किया जाएगा, जो 're.escape' से बच निकला है। इस प्रकार, मुझे स्ट्रिंग को प्रोग्रामिक रूप से ''[' + s [i] + s [i] .swapcase() + ']' ... 'में विस्तारित करने की आवश्यकता होगी। संभावित विराम चिह्न और अन्य गैर-अल्फान्यूमेरिक वर्ण हालांकि समस्या पैदा करेंगे। – Vortico

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