Python核心编程(1)--正则表达式

作者: IT小样

之前学习的python都是很零散的,没有系统找书来看,最近入手Python核心编程一书,打算好好看一下自己会用到的一些模块,并在阅读后写下自己的心得,是总结也方便自己以后回顾。首当其冲就是正则表达式啦!

正则表达式进行匹配时,采取的是贪婪匹配法,即尽可能多的匹配。以符号来说,它代表匹配0次或多次,正则表达式为he*,字符串为heeeeeeeee,则匹配结果为整个字符串。
如果想要采取非贪婪匹配法,则在重复性字符后加上?,这表示采用重复字符的最少匹配次数,
?代表0次,+?代表1次,??代表0次,{M,N}代表M次。详细的字符串匹配见下表

常用正则表达式符号

表示法 描述 正则表达式实例
literal 匹配文本字串的字面值,所见即所得 hello
. 匹配除\n外任意字符 hel.o
re1|re2 匹配模式re1或者re2 hello|Hello
^ 表示字符串起始 ^hello
$ 表示字符串结尾 hello$
* 表示前面的字符出现0次或多次 he*
+ 表示前面的字符出现1次或多次 he+
表示前面的字符出现0次或1次 he?
{M} 表示匹配M次前面出现的正则表达式 he{M}
{M,N} 表示匹配M到N次前面出现的正则表达式 he{M,N}
[…] 表示匹配来自字符集的任意一个字符 [aeoiu]
[…x-y…] 表示匹配x-y范围中的任意一个字符 [0-9A-Z]
[^…] 表示不匹配此字符集中的任意一个字符 [^aeoiu]
*? 匹配0次(在重复匹配符号后加上?,表示匹配最少次数) h.*?
(…) 匹配封闭的正则表达式,然后存为子组 (h*)ello

正则表达式特殊字符

表示法 描述 正则表达式实例
\d 匹配任意十进制数字与[0-9]一致,\D表示匹配任意非数值型数字 hello\d+
\w 匹配任意字母数字,\W与之相反 Hello\w*
\s 匹配任何空格字符,\S与之相反 hello\s?
\b 匹配任何单词边界,\B与之相反 \bhello\b
\N 匹配已保存的子组N price:\2
\c 逐字匹配任何特殊字符c,按字面意思匹配,不匹配特殊含义 \.,\\
\A(\Z) 匹配字符串的起始(结束) \Ahello

此处解释一下分组(…),分组是把特定的正则表达式放在一起成为一个分组,一个正则表达式中可以有多个分组,比如:h(e\w+)\d(u[0-9])+,此正则表达式一共有两个分组,可以结合Python方法group(),groups()妙用,在下面会有讲解示例。

python正则表达式方法

正则表达式模块为re,需要掌握的方法有:match(),search()、group(),groups()方法
match()代表从首部开始匹配,search()表示从任意位置开始搜索匹配,group()输出完整匹配结果,如果跟上下标,则表示输出对应子组,如group(1)代表输出第一个匹配的子组,详见示例;groups()输出所有子组,若无子组,则输出为空。

import re
pattern1 = 'he\w+'
pattern2 = '(he\wc)_(p)'
str1 = 'helco_piw"
str2 = 'Hhelco piw'
re.match(pattern1,str1).group()  #输出'helco'
re.match(pattern1,str2).group() #无输出,因为字首不匹配
re.search(pattern1,str2).group() #输出'helco',因为search从整个字符串中搜索

#分组示例,以及group()和groups()用法
result = re.match(pattern2,str1)
result.guoup()   #输出'helco_p',输出的是完整匹配
result.group(1) #输出'helco'
result.group(2) #输出'p'
result.groups() #输出('helco','p')


发布了39 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_31315135/article/details/87971516