views:

4483

answers:

2

In Python, I can compile a regular expression to be case-insensitive using 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>

Is there a way to do the same, but without using re.compile. I can't find anything like perl's i suffic (e.g. m/test/i) in the documentation.


This is somewhat related to my previous question Is it worth using Python’s re.compile? but different enough to ask separately.

+11  A: 

It looks like you just need to pass it as a param to search or match:

re.search('test', 'TeSt', re.IGNORECASE)
re.match('test', 'TeSt', re.IGNORECASE)

For re.sub, it looks like this might help:

result = re.sub(r'(?i)test’, ’XXXX′, 'TeSt')
Michael Haren
Cool. That works for search and match. I was actually looking for doing it with re.sub when I was searching around, but simplified my example posted here too much! re.sub('test', 'xxxx', 'Testing', re.IGNORECASE) doesn't work.
Mat
I updated my answer with something else that might work
Michael Haren
A: 

I'm not overly familiar with Python, but this is one way to do it in Perl which might be portable to Python:

#!/usr/bin/perl
$x = "Test";
(lc $x) ~= /test/;  # this effectively makes the regex case 
                    # insensitive, assuming that the regex is all 
                    # lower case.
(uc $x) ~= /TEST/;  # this does the same if you happen to prefer 
                    # upper case.
Nathan Fellman