2009-02-01 13 views
193

अजगर में बिना, मैं एक नियमित अभिव्यक्ति संकलन re.compile का उपयोग कर केस-संवेदी होने के लिए कर सकते हैं:मामले असंवेदनशील अजगर नियमित अभिव्यक्ति re.compile

>>> s = 'TeSt' 
>>> casesensitive = re.compile('test') 
>>> ignorecase = re.compile('test', re.IGNORECASE) 
>>> 
>>> print casesensitive.match(s) 
None 
>>> print ignorecase.match(s) 
<_sre.SRE_Match object at 0x02F0B608> 

वहाँ भी ऐसा ही करने के लिए एक रास्ता है, लेकिन re.compile का उपयोग किए बिना। मुझे प्रलेखन में पर्ल के i प्रत्यय (उदा। m/test/i) जैसी कुछ भी नहीं मिल रही है।

+0

आप पर नियमित रूप से experssoins लिए एक उत्कृष्ट परिचय पा सकते हैं: http://www.python-course.eu/re.php – 2Obe

उत्तर

322

search की flags परम के पास re.IGNORECASE, match, या sub:

re.search('test', 'TeSt', re.IGNORECASE) 
re.match('test', 'TeSt', re.IGNORECASE) 
re.sub('test', 'xxxx', 'Testing', flags=re.IGNORECASE) 
+0

@ericso की जिस तरह से अच्छा है। और इसकी सरल और कामकाजी –

+0

're.match ('test', 'Test', re.IGNORECASE) '' टाइपरर' 'हो सकती है जब कोई भी विशेषता' कोई नहीं 'हो। First_string == second_string द्वारा 'TypeError' मिलान को पकड़ने के लिए 'कोशिश करें और छोड़कर' का उपयोग करना। ** नमूना कोड ** 'डीईएफ़ equal_ignore_case (first_string, second_string): कोशिश: वापसी re.match (first_string, second_string, re.IGNORECASE) को छोड़कर (AttributeError, लेखन त्रुटि) कोई नहीं नहीं है: वापसी first_string == second_string' [डेमो कोड] (https://repl.it/FWih) – Abhijeet

+0

सही स्थिरता प्रस्तुत करता है, लेकिन वास्तविक प्रश्न का उत्तर नहीं देता है। –

61

तुम भी IGNORECASE ध्वज (अजगर 2.7.3 में परीक्षण) के बिना खोज/मिलान का उपयोग केस संवेदी खोजें कर सकते हैं:

re.search(r'(?i)test', 'TeSt').group() ## returns 'TeSt' 
re.match(r'(?i)test', 'TeSt').group()  ## returns 'TeSt' 
+1

प्रलेखन किसी भी विशेष संस्करण में जोड़ा जा रहा सुविधा का उल्लेख नहीं करता है (जैसा कि कहता है, '(? (हालत) हाँ | नहीं)' जिसका कहना है कि 2.4 में जोड़ा गया था), इसलिए मुझे उम्मीद है कि यह हमेशा से उपलब्ध रहेगा 'पुनः' मॉड्यूल का पहला संस्करण, जो मुझे लगता है 1.5 में जोड़ा गया था। मूल रूप से जब Python की बात आती है तो सभी उद्देश्यों और उद्देश्यों के लिए समय की शुरुआत के बाद से। इस पृष्ठ के पहले भाग के माध्यम से इसे आधे रास्ते में दस्तावेज किया गया है: https://docs.python.org/2/library/re.html#regular-expression-syntax – ArtOfWarfare

+3

यहां हम जाते हैं - मैंने 1.5 के लिए प्रलेखन को देखा और पाया इस पृष्ठ के नीचे 60% तरीके से दस्तावेज किया गया है: https://docs.python.org/release/1.5/lib/node65.html#SECTION005210000000000000000 मैंने 1.4 दस्तावेज भी चेक किए, जिसने इस सुविधा का कोई जिक्र नहीं किया। तो मुझे लगता है कि इसे 1.5 में जोड़ा गया था, जब 'regex' मॉड्यूल को 'पुनः' मॉड्यूल के पक्ष में बहिष्कृत किया गया था। – ArtOfWarfare

+0

क्या यह अजगर 3 में काम करता है? – Private

5

तुम भी पैटर्न संकलन के दौरान केस संवेदी परिभाषित कर सकते हैं:

pattern = re.compile('FIle:/+(.*)', re.IGNORECASE) 
+4

प्रश्न में ओपी इसका उपयोग करता है और पूछता है कि ऐसा करने का दूसरा तरीका है या नहीं। –

+1

तेजी से स्क्रॉल करने वाले लोगों के लिए सहायक। – nottinhill

+1

प्रश्न मिलान के मामले को अनदेखा करने के बारे में था, जिसे यहां चित्रित नहीं किया गया है। –

2
#'re.IGNORECASE' for case insensitive results short form re.I 
#'re.match' returns the first match located 
#'re.search' returns location of the where the match is found 
#'re.compile' creates a regex object that can be used for multiple matches 

s = 'TeSt' 
print (re.match(s, re.I)) 
# OR 
pattern = re.compile(r'TeSt', re.I) 
result = pattern.match(s) 
15

केस-संवेदी मार्कर, (?i) regex पैटर्न में सीधे शामिल किया जा सकता:

>>> import re 
>>> s = 'This is one Test, another TEST, and another test.' 
>>> re.findall('(?i)test', s) 
['Test', 'TEST', 'test'] 
+1

बेहतर विकल्प, प्लेटफॉर्म पर रीगेक्स पोर्टेबल बनाता है और घोषणा घोषणा पर स्पष्ट है –

1

आयात

import re 

एप्लिकेशन प्रारंभ में:

self.re_test = re.compile('test', re.IGNORECASE) 

रन टाइम प्रोसेसिंग में:

if self.re_test.match('TeSt'): 
संबंधित मुद्दे