Python正则表达式(一)
正则表达式(regularexpression)在编程中占有重要地位,它能够按照指定的方式匹配具有某种结构的字符串。本文将对此技术给予详述。Python中的正则表达式
假设有一个字符串s,在程序中,需要检查123是否为这个字符串的一部分,这种需求可以用下面的代码实现。sfoo123bar123insTrue
如果你不仅想知道123是否在字符串s中,还想知道它在字符串的什么位置,可以使用字符串的。find()或者。index()方法,返回123在s中的索引。sfoo123bars。find(123)3s。index(123)3
在上面的例子中,是按照字符一一对应的方式匹配的,这种方式会适用于很多地方,但是,有时候也会有更复杂的问题。比如,判断字符串中是否有像123这样有数字组成的字符串,例如foo123bar、foo456bar、234baz、和qux678,再用上面的方法,就会太麻烦了,这就要正则表达式出场了。正则表达式极简史
1951年,数学家斯StephenColeKleene提出了正则表达式,20世纪60年代中期,计算机科学先驱KenThompsonUnix的原始设计师之一,他使用Kleene创造的符号在QED文本编辑器中实现了模式匹配。
自那时以来,正则表达式就出现在了许多编程语言、编辑器和其他工具中,作为确定字符串是否与指定模式匹配的方法,Python、Java和Perl等都支持正则表达式,大多数Unix工具和许多文本编辑器都支持正则表达式。re模块
Python中的正则表达式用re模块实现,它包括很多实用的方法,接下来,会介绍其中的大部分。
现在,先来研究re。search()。re。search(regex,string)Scansastringforaregexmatch。
re。search(,)按照参数所设置的正则表达式,扫描参数的字符串,这个过程可以称为匹配,如果有符合正则表达式结构的子字符串,即匹配存在,就会返回第一个所匹配的对象,否则返回None。
后面还会介绍,re。search()中的第三个参数。怎么使用re。search()
基本使用方法如下:importrere。search(。。。)熟悉模块使用方法的,可能会知道,还能这样做:fromreimportsearchsearch(。。。)示例
下面的示例,演示re。search()的基本应用:sfoo123barimportrere。search(123,s)sre。SREMatchobject;span(3,6),match123
在上面示例中,就是123,是字符串s,最后返回了匹配结果,有此结果,我们至少知道字符串s中含有123。
如果写一个比较完整的程序,可以用条件语句判断一下:ifre。search(123,s):。。。print(Foundamatch。)。。。else:。。。print(Nomatch。)。。。Foundamatch。
前面代码中返回结果sre。SREMatchobject;span(3,6),match123,其中的span(3,6)意思是字符串中匹配出现的位置,与切片的含义一样。s〔3:6〕123
不过,上面的例子显然没有体现正则表达式的优势,只说明了它的基本操作流程。正则表达式中的元字符
在正则表达式中,有一些特定字符,它们被称为元字符,每个元字符,代表了正则表达式中的某个特殊含义,能够满足正则匹配搜索引擎的查询之需。
例如,一组方括号(〔〕)表示了一个元字符类,即匹配字符类中的任何一个字符:sfoo123barre。search(〔09〕〔09〕〔09〕,s)sre。SREMatchobject;span(3,6),match123
〔09〕表示要匹配0到9的任何一个数字字符,〔09〕〔09〕〔09〕则表示匹配连续三个0到9之间的任何数字字符,在字符串s中,符合要求的就是123。re。search(〔09〕〔09〕〔09〕,foo456bar)sre。SREMatchobject;span(3,6),match456re。search(〔09〕〔09〕〔09〕,234baz)sre。SREMatchobject;span(0,3),match234re。search(〔09〕〔09〕〔09〕,qux678)sre。SREMatchobject;span(3,6),match678
如果没有连续的三个数字字符,就不会匹配。print(re。search(〔09〕〔09〕〔09〕,12foo34))None
另外一个元字符的例子是句点(。),它表示任何一种类型的字符(除了换行符):sfoo123barre。search(1。3,s)sre。SREMatchobject;span(3,6),match123sfoo13barprint(re。search(1。3,s))None
在第一个例子中,1和3是明显有匹配的,。匹配了2。但是,第二个示例则没有匹配。re模块的元字符
下表中列出的,是re模块支持的元字符。
下面以示例说明部分元字符的应用。字符类符号:〔〕
〔〕里面表示的字符类,即要匹配的一个字符集合。re。search(ba〔artz〕,foobarqux)sre。SREMatchobject;span(3,6),matchbarre。search(ba〔artz〕,foobazqux)sre。SREMatchobject;span(3,6),matchbaz
〔artz〕表示4个独立的字符,在上面的示例中,正则表达式ba〔artz〕匹配了字符串中的bar和baz,当然,如果有可能,还可以匹配baa、bat。
字符集中,可以用表示字符序列的范围,例如〔az〕表示匹配英文小写字母a到z中的任何一个字母。re。search(〔az〕,FOObar)sre。SREMatchobject;span(3,4),matchb
〔09〕表示任何一个数字字符:re。search(〔09〕〔09〕,foo123bar)sre。SREMatchobject;span(3,5),match12
在这个示例中,〔09〕〔09〕表示匹配两个数字组成的字符串,对于字符串foo123bar,匹配了第一次出现的符合正则表达式的部分。
〔09afAF〕表示16进制的任何一个字符。re。search(〔09afAf〕,a0)sre。SREMatchobject;span(4,5),matcha
这里匹配了第一个出现的16进制的字符a。
也可以在字符类中以作为第一个字符,则表示要匹配该字符类的补集,即所有不是字符集中的字符。如下所示,〔09〕表示非数字字符。re。search(〔09〕,12345foo)sre。SREMatchobject;span(5,6),matchf
这里匹配的结果是第一个非数字的字母字符f。如果不在首位,就没有了上面那种特殊含义了,仅仅是一个普通的符号。re。search(〔:〕,foobar:bazqux)sre。SREMatchobject;span(3,4),match
前面已经说过,表示了字符范围,但是,如果希望在正则表达式中匹配一个连字符,怎么办?如果在首位或者末尾,就表示连字符本身,如果在中间,可以只用转义符。re。search(〔abc〕,123456)sre。SREMatchobject;span(3,4),matchre。search(〔abc〕,123456)sre。SREMatchobject;span(3,4),matchre。search(〔abc〕,123456)sre。SREMatchobject;span(3,4),match
同样,对于〕符号,也可以用类似方法处理。re。search(〔〕〕,foo〔1〕)sre。SREMatchobject;span(5,6),match〕re。search(〔ab〕cd〕,foo〔1〕)sre。SREMatchobject;span(5,6),match〕
在〔〕所设定的字符集中,其他各种元字符都失掉了作为元字符的含义。re。search(〔)〕,123456)sre。SREMatchobject;span(3,4),matchre。search(〔)〕,123456)sre。SREMatchobject;span(3,4),match
这些元字符都编程了普通的字符。
跟着唐诗宋词去旅游丨赤壁编者按媒体作为传递主流价值的信使,担负着承载文化、引领价值、成风化人的使命。我们希望找到符合当代审美、以年轻人喜闻乐见的方式推动古与今的对话,更好地传承中华优秀传统文化。……
勇士客场11连败,水花兄弟状态低迷,客场魔咒真的难以打破?在今天上午结束的NBA比赛中,勇士队119:133客场不敌灰熊,客场11连败继续刷新队史纪录,勇士队客场难求一胜,这一客场魔咒不知何时才能打破。比赛中,水花兄弟状态都异常低迷,……
本田再发力,何日才能两面生花?从电动化春风吹来至今,新能源汽车逐渐步入主流,汽车市场已然发生了巨大的变化。虽然近几年受到疫情、芯片短缺、原材料上涨等因素的影响,汽车增速有所放缓,但是整体来说依旧欣欣向荣。……
姚晨亮相微博之夜黑纱鱼尾裙展露低调大气女王范儿今日,演员姚晨出席2022微博之夜,一袭黑纱深v鱼尾裙将她大方沉稳的气质很好的衬托开来,黑发红唇的利落标配也让大姚整个人都气场全开。没有过多繁杂的设计和点缀,简约大气的黑……
自制肉夹馍,吃一个管饱超级过瘾,学会不用买了说到肉夹馍,这可是一道历史悠久,又人见人爱的传统美味。虽说有点类似肉饼的质感,但不论从颜值还是口感来说都远非其他肉类美食可比。但它保持了很多面点的传统口感,吃起来更加细腻,更有……
1。4万亿元!烟民都是大善人本次重大会议上公布了2023年全国一般公共预算中,用于国防支出的1。58万亿元,比上年执行数增长7。2。无论是绝对金额,还是同比增幅,国防支出预算,都创下了近些年来我国的……
大散文月满西楼(三)大散文月满西楼(三)作者崔洪国江流宛转绕芳甸,月照华林皆似霰,相伴着你的那轮明月会变魔术,闭眼睁眼,故乡山川、河流湖波、曲径通幽转眼之间就变出来了。你不曾见过的山川……
大宝患罕见病,高龄二胎备孕,我是不是疯了?我和我老公在帝都工作,都是普通的工薪族,我们苦中作乐,对未来充满了希望和憧憬。万万没想到,2016年我们幸福的小家庭突遭变故,年仅5岁的孩子查出罕见病,动了一次大手术,好……
外媒印俄石油交易削弱美元主导地位来源:海外网印度石油和天然气部长哈迪普辛格普里(美国消费者新闻与商业频道)海外网月日电据路透社月日报道,以美国为首的国家对俄罗斯的制裁已经开始削弱美元在国际石油贸易……
这条风貌保护道路,兼具时尚潮流与烟火气摘要:历史与未来叠合、怀旧与时尚碰撞、日常与艺术融合,这种一反生活在别处的生活场景,让武夷路突然成为一种生活向往。武夷路东起延安西路,经安西路、定西路、凯旋路、沪杭铁路、……
艾尔登法环网测体验充满魂味的开放世界,期待正式版的推出欢迎关注,获取更多游戏评测资讯,入手与否不再犹豫。()似魂非魂由FromSoftware开发的动作RPG游戏《艾尔登法环》,从初次曝出到后续放出的视频预告,可谓钓了不少粉……
王权没有永恒?动视暴雪的帝国坟场如果用两个字来形容现在的暴雪玩家,那就是难民。每一位暴黑曾经都是将暴雪捧上天的暴粉。曾经的暴雪,一把闭着眼打都能赢的天牌起手,单机有《暗黑》系列、《魔兽》系列、《星……