python 中 正则表达式(Regular Expressions)学习

时间:2022-11-11 14:43:44

刚接触了python中的re模块,由于之前没有对正则表达式进行系统性的学习,学起来很费劲,因此写下这篇博客进行积累和巩固,以备后用。

正则表达式的应用是非常广泛的,不论是在linux中还是在编程中,我们总会遇到正则表达式,借着学习python的机会,也稍微系统的学习一下正则表达式。

自己看了下正则表达式的帮助文档,也在Internet上看了一些相关的资料,网上的资料对这个介绍的还是很多的。

以下为自己的学习经历:

'*'  这个符号在通配符中是最经常使用的,我们常常用它来匹配任意的字符,在RE中也是如此,'*'表示的是:匹配0个或者多个字符

print(re.match(r'ab*', 'abb').group())

以上例子中,*表示匹配多个b结尾的字符。

'.'  这个符号是dot,点字符,表示的是:匹配任意的字符。

当:

print(re.match(r'.*', 'abc\ndef').group())

表示匹配一行,添加函数 re.DOTALL时,匹配的是整个字符串,多行。

print(re.match(r'.*', 'abc\ndef', re.DOTALL).group())

'+'  表示的是:匹配一个或者多个字符,说明

print(re.match(r'ab+', 'abbbb'))

匹配的是一个或者多个b字符。

'?'  表示:匹配的是0个或者一个字符,说明

print(re.match(r'ab?', 'abbb'))

同样会匹配上,因为abbb中包含ab,a

'^'  这个符号是caret,脱字符,表示的是:匹配一行的首字符。

说明:当

print(re.findall(r'^abc', 'abc\nabc',))

匹配的是\n前面的字符串,只返回一个abc,但是如下情况的话:

print(re.findall(r'^abc', 'abc\nabc', re.MULTILINE))

匹配两个abc字符串,re.MULTILINE函数,顾名思义,我们在匹配时将对多行进行匹配,所以匹配了两个abc字符。

'$'  这个符号是表示:匹配一行的尾字符。

说明:

print(re.findall(r'abc\d$', 'abc1\nabc3', re.MULTILINE))

当出现re.MULTILINE时,表示匹配多行。

'\'  转义字符,这个在其他语言和环境中是经常应用的,如果添加转义的话,才不会产生歧义。

'[]' 匹配集合符号,表示匹配[]中的字符,说明:

print(re.search(r'0[xX]([0-9a-fA-F]{6})', 'the hex value is 0x2378ad'))

这个语句表示匹配十六进制的数。

'{m}'  表示的是:匹配{}中的m个字符,说明:

print(re.match(r'ab{3,5}', 'abbbbb').group())

表示的是:匹配3-5个b在字符串中,但是python默认会匹配5个,匹配大的个数。(贪婪模式)


说明 re.match() 和 re.search()的区别

#!/usr/bin/python# -*- coding: UTF-8 -*- import reprint(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配print(re.match('com', 'www.runoob.com'))      # 不在起始位置匹配

返回结果:

(0, 3)None
#!/usr/bin/python# -*- coding: UTF-8 -*- import reprint(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配

返回结果:

(0, 3)(11, 14)

比较之下可以看出,两者的区别在于,是否在开始进行匹配,match为从起始位置进行匹配,而search则是不从开始匹配,(其实理解两者英文意思也可明白,一个是匹配,一个是搜索)

关于特殊的转义的说明:


\A

匹配字符串的开始

 

\b

匹配空字符串(匹配位置比较容易理解),但只在单词的开头或结尾。(也作为分割字符串)一个单词是由字母数字或下划线字符组成,因此一个单词的边界是空白或者非字母 数字、不包括下划线。请注意,\b是指\w和\W之间的边界,因此确切的字符集定义取决于UNICODE和LOCALE编译标志的值。在字符范围内,\b 表示退格符,与python的字符串兼容。

 

\B

匹配空字符串(匹配位置比较容易理解),但当它不在单词的开始或结尾。这是和\b相反的,也受到LOCALE和UNICODE的设置影响。

 

\d

当UNICODE标志没有指定,匹配任何10进制数字,相当于[0-9]。带UNICODE标志时,它会匹配任何在unicode字符集中属于数字分类的字符。

 

\D

当UNICODE标志没有指定,匹配任何非数字字符,相当于[^0-9]。带UNICODE标志时,它会匹配任何不在unicode字符集中属于数字分类的字符。

 

\s

当LOCALE和UNICODE标志没有指定时,匹配任何空白字符,这相当于[ \t\n\r\f\v]。带LOCALE标志时,它将匹配当前环境定义的空白符。如果带UNICODE标志,那么将匹配任何被划分为空白符的符号。

 

\S

当LOCALE和UNICODE标志没有指定时,匹配任何非空白字符,这相当于[^\t\n\r\f\v]。带LOCALE标志时,它将匹配当前环境定义的非空白符。如果带UNICODE标志,那么将匹配任何不被划分为空白符的符号。

 

\w

当LOCALE和UNICODE标志没有指定时,匹配任何字母数字字符、下划线,这相当于[a-zA-Z0-9_]。带LOCALE标志时,它 将匹配当前环境定义的字母和[0-9_]。带UINCODE标志时,将匹配在unicode字符集里划分为字母的字符和[0-9_]。

 

\W

当LOCALE和UNICODE标志没有指定时,匹配任何非字母数字字符、下划线,这相当于[^a-zA-Z0-9_]。带LOCALE标志 时,它将匹配除了当前环境定义的字母、[0-9_]。带UINCODE标志时,将匹配除了在unicode字符集里划分为字母的字符、[0-9_]。

 

\Z

匹配字符串的结束

以上规则比较好记忆,因为都是两两相对应的。

本文出自 “9651854” 博客,请务必保留此出处http://9661854.blog.51cto.com/9651854/1784290