不区分大小写的Python正则expression式,不包含re.compile

在Python中,我可以使用re.compile编译正则expression式以区分大小写:

 >>> 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 。 我在文档中找不到像Perl的后缀(例如m/test/i )。

re.IGNORECASE传递给searchmatchsub flags参数:

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

您也可以使用不带IGNORECASE标志的search/匹配来执行不区分大小写的search(在Python 2.7.3中testing):

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

不区分大小写的标记(?i)可以直接合并到正则expression式中:

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

您也可以在模式编译期间定义不区分大小写:

 pattern = re.compile('FIle:/+(.*)', re.IGNORECASE) 
 #'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) 

在import

 import re 

在应用初始化中:

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

在运行时处理:

 if self.re_test.match('TeSt'): 

使用sub你可以指定你想要过滤的string,就像你的例子中的DOCTYPE那样,只需要replace它就可以了。 在下面的例子中,我将取代段落标签之间的所有内容。

 import re htmlstring = ''' <!DOCTYPE html> <html> <body> <p>This is a paragraph.</p> <p>This is a paragraph.</p> <p>This is a paragraph.</p> </body> </html>''' stringlist = re.findall('<p>.*</p>', htmlstring, re.IGNORECASE) for s in stringlist: print re.sub('<p>.*</p>','<p>new string</p>',s) >> <p>new string</p> >> <p>new string</p> >> <p>new string</p> 

或者你可以使用:

 stringlist = re.findall('<p>.*</p>', htmlstring, re.IGNORECASE) for s in stringlist: print s.replace(s, '<p>new string</p>')