CDA数据分析师出品经过前三篇连载,相信大家对Python的re模块使用正则表达式匹配字符串有了一定的了解。到此为止,基本所有的入门难点知识点都学完了,继续补充没学过的知识点,包括:行定位符和转义符,以及re模块的re.sub()方法和重新。分裂()方法。行定位符行定位符是用来描述字符串表亲的符号,“^”表示行首,“$”表示行尾。比如我们要匹配不同的字符串,如果字符串以“公司名称”开头,那么就匹配公司名称后面的字符:pattern='^CompanyName.*'message='CompanyName:CDADataScienceInstituten公司名称:广州市学习在线科技有限公司n'search=re.findall(pattern,message)search['公司名称:CDA数据科学研究所']上面的pattern字符串不能用在下面stringmessage_02匹配任意结果:pattern='^公司名.*'message_02='Email:1918560461@qq.com'search=re.search(pattern,message_02)search如果需要匹配满足的行尾条件,可以使用“$”符号。例如,要匹配以“研究所”结尾的字符串:pattern='.*ResearchInstitute$'message='公司名称:CDA数据科学研究所'search=re.search(pattern,message)search<重新匹配对象;span=(0,15),match='企业名称:CDA数据科学研究所'>如果你看过之前的连载文章,你可能还记得,正则表达式中的“^”符号并不是前面说的那个排除字符?为什么这又是一个行定位器?这里要给大家区分一下这种现象:“^”符号只能用在方括号中,排除方括号的字符。比如下面的字符串中,记录了很多姓氏:message="吴少、繁霞、柳川"如果要提取除“敖”、“川”以外的姓氏,应该如何提取呢?这时候可以在正则表达式中使用排除符“^”。大家可能会觉得奇怪,这不是之前的行定位符吗?这里需要补充的是:如果方括号中使用了符号“^”,则方括号内的字符将被单独排除:pattern='1'message="吴少、繁霞、流川"re.findall(pattern,message)['Wu','Shi','Fan','Xia','Liu']那么我们会发现,除了方括号中的“敖”和“川”两个字前面的patternstring中除"之外的所有字符都被提取出来。re.sub()方法之前的连载文章介绍了re模块的三大方法,包括re.match()、re.search()、re.findall(),都是用来匹配字符串的方法,另外还有re.sub()和re.split()方法,分别用来替换和拆分字符串,先解释一下re.sub()方法.如果要替换字符串中正则表达式匹配到的字符,应该怎么做呢?比如下面的字符串中,将字符“川”开头的名字替换为字符“*”,我应该怎么办?然后你可以使用re.sub()方法。message="吴刚德,吴浩问史振祥,,廖兰英,范同川,建国,夏建仁,刘禅"re.sub()方法的语法格式如下:re.sub(pattern,repl,string,count,flags)pattern:patternstringrepl:待替换的字符串string:待匹配替换的字符串count:可选参数,表示最大替换次数,默认替换所有flags:an可选字符串,表示标志继续我们前面提到的任务,我们可以使用re.sub()方法将消息中以“川”字开头的名字替换为字符“*”:pattern=r"bChuan.{2,3}"message="吴刚德吴浩问史振祥廖兰英范同川建国夏建仁刘禅"re.sub(pattern,"*",message)'吴刚德吴浩问石真香***蓝影范桐***夏建仁刘禅're.split()方法re模块中的字符串拆分方法和Py中的split()非常相似thonstring对象,除了re模块中的拆分方法使用正则表达式来匹配分隔符,其语法如下:re.split(pattern,string,[maxsplit],[flags])pattern:patternstringstring:待匹配替换的字符串maxsplit:可选参数,表示最大拆分数flags:可选参数,表示标志位比如us如果要提取@的网名“端木天”、“影光光”、“知行一”在下面的message中:message="@端木天@一米阳光@知行一"使用re.split()提取如下:pattern=r'@'message="@Evan.P@端木天@一米阳光@知行一"re.split(pattern,message)['','Evan.P','端木田','一米阳光','知行一']正则表达式的小case到此结束。我们的正则表达式基础知识就介绍到这里。下面我们用一个小案例让大家体验一下正则表达式的使用——提取字符串Emailname中的字符,例如我们有如下字符串:text="""Davedave@google.comStevesteve@gmail.comRobrob@gmail.comRyanryan@yahoo.com"""电子邮件地址标有“@”符号,在“@”符号的左侧,直到空格键、“@”符号右侧直到换行符是电子邮件地址。“@”左边为登录名,包括大小写英文字母和数字。模式字符串可以写成“[A-Z0-9]+”。“@”右边是域名,域名之间用“.”隔开。符号,“.”的左侧是主机名,右边是“.”是域名。主机名主要由大小写英文字母和数字组成,模式字符串可以写成“[A-Z0-9]+”。域名主要由小写英文字母组成,长度为2~4,模式字符串可以写成[A-Z]{2,4}。如果想在匹配时忽略大小写,可以在re.findall()方法中设置参数flags=re.IGNORECASE。不过需要注意的是,既然有一个“.”电子邮件地址中的符号,以及“.”symbol表示正则表达式中除换行符以外的任何字符,在编写模式字符串时,在“.”之前。需要添加转义字符"":text="""Davedave@google.comStevesteve@gmail.comRobrob@gmail.comRyanryan@yahoo.com"""pattern=r'[A-Z0-9]+@[A-Z0-9]+.[A-Z]{2,4}'re.IGNORECASE使正则表达式不区分大小写re.findall(pattern,text,flags=re.IGNORECASE)['dave@google.com','steve@gmail.com','rob@gmail.com','ryan@yahoo.com']更多行业干货持续为您分享,您可以随时关注我们!(1)获取更多优质内容,可以前往:当前疫情有所缓和,也是提升自我、为未来蓄力的好时机——蓄势待发!(2)搜索CDA小程序,移动端随时随地浏览最新资讯和优质课程:奥川?
