python标准库中的re模块是正则表达式模块,本文主要讲几个最常用的方法以帮助日常最常碰到的关于字符串的过滤和处理。
一、对于字符串开头匹配
有时我们需要选取以特定特征开头的字符串,特别是在I/O时,我们常需要对一些非结构化的字符串进行逐行过滤,选取符合开头要求的行,这时可以利用re.match(rexp,string),其中rexp表示正则表达式的匹配模式,string表示被匹配的字符串。match()函数是头部匹配函数,一旦头部匹配成功,则会返回一个matchObject,匹配失败则会返回None。基于此,我们可以用re.match()函数进行字符串的开头匹配,进行过滤。字符串对象本身也有startswith()、endswith()方法,但是其不支持正则表达式,有时候并不能简单的达到我们的匹配要求,所以正则表达式往往更高效和简洁。
二、判断字符串中是否含有某些特征
我们通常需要判断整个字符串中是否含有某些特征的子字符串,然后进行过滤和处理,这时由于需要判断的整个字符串,于是就不能用仅仅进行头部匹配的函数re.match()了。对此,我们可以使用re.search(rexp,string),该函数会对整个字符串进行扫描,直到匹配到符合特征的地方为止,返回匹配到的matchObject,如果扫描完整个字符串都没有匹配到,则返回None。对此,如果返回的是None,则说明该字符串不含有该特征,如果返回的是非空对象,则说明具有该特征,关于返回对象的判断,可以利用bool()函数实现。
三、匹配并返回所有符合特征的子字符串
利用re.findall(rexp,string)可以匹配所有的string中的符合特征的子字符串,并以列表的形式返回。如果没有符合特征的子字符串,则返回空列表。
四、利用多个分隔符拆分字符串
字符串对象本身有split()方法,可以根据特定的字符进行字符串的拆分。但是如果我们想要同时利用多个分隔符,这时就需要用更加普适的正则表达式,利用re.split(rexp,string)对string进行拆分,结果以列表的形式返回。
五、多个字符(串)替换
字符串本身有replace方法,但是和字符串本身的split方法一样,只能对特定的字符进行替换。如果我们要同时对多个字符或者字符串进行替换,则可以用re.sub(rexp,string)实现。