不区分大小写的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
传递给search
, match
或sub
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>')