python标准库常用模块(五)-----------------------------正则表达式re模块详解及示例代码(内附正则表达式特殊模式的对照表)

很多语言都会用到正则表达式,比如Java,那么,它到底是用来干什么的呢,是用来处理字符串的高级操作,因为普通的字符串操作已经满足不了我们的需求了。

先举个例子,当你上网输入网站的时候,他就会对你输入网站的字符串进行处理,看看是否是合法的网站格式。

另一个例子,百度搜索大家应该都用过,当我们在文本框中输入内容的时候,就会对其中的内容进行一些操作,如果你的内容中间输入了多个无效的空格,它会进行判断,并删除这些空格,这就需要用到字符串的高级操作了,也就是正则表达式。

在介绍它的各种功能之前,我们先列一个表,用于下面讲解的使用,这个表列出了正则表达式的特殊元素。

模式 描述
^ 匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或多个的表达式。
re+ 匹配1个或多个的表达式。
re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n} 精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。
re{ n,} 匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a| b 匹配a或b
(re) 匹配括号内的表达式,也表示一个组
(?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re) 类似 (...), 但是不表示一个组
(?imx: re) 在括号中使用i, m, 或 x 可选标志
(?-imx: re) 在括号中不使用i, m, 或 x 可选标志
(?#...) 注释.
(?= re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re) 匹配的独立模式,省去回溯。
\w 匹配字母数字及下划线
\W 匹配非字母数字及下划线
\s 匹配任意空白字符,等价于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9].
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z 匹配字符串结束
\G 匹配最后匹配完成的位置。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等. 匹配一个换行符。匹配一个制表符。等
\1...\9 匹配第n个分组的内容。
\10 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

1.字符串的匹配功能,成功则返回匹配对象,不成功则什么也不返回,只匹配字符串的头:re.match(pattern,string)

>>> re.match('a','abcde')
<re.Match object; span=(0, 1), match='a'>

不仅可以尾一个字符,也可为多个字符

>>> re.match('www','www.baidu.com')
<re.Match object; span=(0, 3), match='www'>

2.扫描整个字符串并返回第一个成功的匹配:re.search(pattern, string)

>>> re.search('b','adgedeb')
<re.Match object; span=(6, 7), match='b'>

>>> re.search('wangwu','zhangsan lisi wangwu zhaoliu qianwu')
<re.Match object; span=(14, 20), match='wangwu'>

3.re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

4.替换字符串中的匹配项:re.sub(pattern, repl, string)

>>> re.sub('zhangqiling','*****','zhangqiling eryuehong chenpiasi wuxie zhangqiling licu liangwan panzi zhangqiling')
'***** eryuehong chenpiasi wuxie ***** licu liangwan panzi *****'

5.用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用:re.compile(pattern)

>>> pattern = re.compile('\d+')
>>> pattern.match('12twothree34four')
<re.Match object; span=(0, 2), match='12'>

6.在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表:findall(string[, pos[, endpos]])

>>> re.findall('\d','age1gegggrgegage2jyjryhrtage3jtyjerherage4')
['1', '2', '3', '4']

7.按照能够匹配的子串将字符串分割后返回列表:re.split(pattern, string)

>>> re.split('\W+', 'runoob, runoob, runoob.')
['runoob', 'runoob', 'runoob', '']

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/82657764