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
这些元字符都编程了普通的字符。
为什么倪妮穿什么都好看?倪妮的腰臀比可是当今娱乐圈独一档的存在,不为众人所知的是,她还是一位国家二级游泳运动员,身高达到一米七的她,还有一张不吹不捧的高级脸,搭配绝佳的气质韵味,时尚驾驭能力极强,可以说光
王者荣耀五神兽系列皮肤上线,朱雀青龙白虎哪款最值得入手?引子王者荣耀有着过亿的用户群体,而且都是国人主玩,如果想长期霸占手游排行榜,天美就要对英雄和皮肤经常推陈出新,以此俘获玩家的心。大家好,我是凡米电竞,一个打算春节好好利用我的压岁钱
苹果为什么不封爱思助手?在苹果的应用商店里,不少应用下载都是要花钱的,但在爱思助手上就可以免费下载。为什么苹果不封禁爱思助手呢?下面就让小趣来谈谈自己的观点。首先我们需要明白一点,其实苹果是封杀了爱思助手
脸色太黄了,怎么美白?内养是根本,外护是防御前几年我的脸一直处在暗黄的状态,一直以为那是黑直到前年有一天我洗完澡,站在镜子前臭美,我感到有些不对劲,我的脸和身上的肤色对比有明显的色差!而且腿还算白,可脚
科沃兹这车怎么样?雪佛兰科沃兹在去年9月份上市,无论从颜值上看还是从配置上看,都让人没得嫌弃,尤其立体感的内饰中控更是非常吸引年轻人的目光。科沃兹一直都是以颜值高深得市场的喜爱,外观大气拉风,特别是
旅途中,如何拍出人景合一的大片?旅途中,有不同的风景。可以是人文气氛浓郁的村镇小城可以是美丽的自然风景不同的风景,有不同的拍摄方法。题主所说的人景合一的大片,我想更主要的还是去自然风景中拍出来的效果吧。以我的经验
一万块是存入支付宝里的余额宝好还是存在微信的零钱通里好?为什么?最近很多人都发生了这样的事情,自己的微信号,在没有任何理由的情况下,被腾讯给封闭,而零钱通里面的钱却无法提取,需要找官方人员进行核实,让不少人苦不堪言。微信和支付宝是我们现在生活离
一个局长热情邀请我到他单位上班后对我不理不睬,为什么?这说明你是一个职场新手,自己太年轻了,根本不明白别人说话的真实意思。举一个我身边的例子吧,当时我们公司一个员工,主要负责工程验收,和施工单位接触比较多,很多施工单位的老板都夸他有专
社保涨,物价涨,年龄涨,有什么不涨?我用三不涨来对你的三个涨,你看对不对?一不涨工资不涨今年有多少人是涨了工资的?只听到一片降薪声,人人怕失业,涨工资想都不要想。今年工资能维持现状,能够按时发就已经不错了。二不涨消费
2021年养老金上调,对比计算,是今年涨钱多,还是去年涨钱多呢?重要紧急通知2021年养老金上调已经出炉,总体上涨幅度为4。5,相比去年,今年部分退休人员的养老金上调有可能下降到只有几十元,而有些退休人员养老金额每月能上调300元。所以退休的朋
硕士毕业去一线城市的企业好,还是去三线城市做公务员好?虽然说选择在个人的意向,但是有些先例还是可以了解一下。讲一下身边几个朋友的故事吧,或许有借鉴作用。同学A,80头部生人,北京985大学硕士毕业的时候去了南方一所二线城市(不是他的老