Python3正则表达式和re模块

1. 正则表达式

1.1 正则表达式符号

2. re模块

2.1 re.compile(pattern[, flags])

2.2 re.findall(pattern, string, flags=0)

2.3 re.finditer(pattern, string, flags=0)

2.4 re.match(pattern, string, flags=0)

2.5 re.serach(pattern, string, flags=0)

2.6 re.split(pattern, string[, maxsplit=0, flags=0])

2.7 re.sub(pattern, repl, string, count=0, flags=0)


1. 正则表达式

  • 就其本质而言,正则表达式(或RE)是一种小型的、高度专业化的编程语言,它内嵌再Python中,并通过re模块实现。正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行。
  • 正则表达式用来匹配字符串,用来进行模糊匹配。
  • 字符串提供的方法是完全匹配。
  • * +?都为贪婪匹配,也就是尽可能匹配,后面加?号使其编程惰性匹配

1.1 正则表达式符号

[ ]可以取消元字符的特殊功能,元字符仅仅为其本身(\ ^  -例外)

正则表达式符号

描述

'.'

通配符,默认匹配除'\n'之外的任意一个字符

'^'

匹配字符开头

'$'

匹配字符结尾

'*'

贪婪匹配。匹配前面的子表达式0或多次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。等价于{0, +∞}

'+'

匹配前面的子表达式1或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”等价于{1, +∞}

'?'

匹配前面的子表达式0或1次。等价于{0, 1}

'.*'

匹配除'\n'之外的任意一个字符0或多次

'{m}'

匹配前一个字符m次

'{n, m}'

贪婪匹配。匹配前一个字符至少n次

'{n, m}'

贪婪匹配。匹配前一个字符n到m次

'[abc]'

匹配所包含的任意一个字符

'[a-z]'

匹配指定范围内的任意字符

'[^a-z]'

匹配任何不在指定范围内的任意字符

'|'

匹配|左或|右的字符

a|b

匹配a或b

'\'

反斜杠后边跟元字符去除特殊功能,反斜杠后边跟部分普通字符实现特殊功能

'(re)'

分组匹配,匹配括号内的表达式

'\A'

匹配字符串开始

'\b'

匹配一个单词的边界,也就是指单词和空格间的位置,需加r(原始字符串)

'\B'

匹配非单词边界。

'\d'

匹配任何十进制数。等价于[0-9]

'\D'

匹配任何非数字字符。等价于[^0-9]

'\G'

匹配最后匹配完成的位置

'\n'

匹配一个换行符

'\s'

匹配任何不可见字符。等价于[ \f\n\r\t\v]。

'\S'

匹配任何可见字符。等价于[^ \f\n\r\t\v]。

'\t'

匹配一个制表符

'\w'

匹配不包括下划线的任何字母数字字符或中文。类似但不等价于“[A-Za-z0-9_]

'\W'

匹配任何非单词字符。等价于[^A-Za-z0-9_]

'\z'

匹配字符串结束

'\Z'

匹配字符串结束。如果存在换行,只匹配到换行前的结束字符串

2. re模块

方法

描述

re.compile(pattern[, flags])

用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() search() 这两个函数使用。

re.findall(pattern, string, flags=0)

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表。如果没有找到匹配的,则返回空列表

re.finditer(pattern, string, flags=0)

 

在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回

re.match(pattern, string, flags=0)

返回只在字符串开始匹配的对象。可以使用group() 或 groups() 匹配对象函数来获取匹配表达式

re.serach(pattern, string, flags=0)

返回匹配到的第一个对象。可以使用group() 或 groups() 匹配对象函数来获取匹配表达式

re.split(pattern, string[, maxsplit=0, flags=0])

按照能够匹配的子串将字符串分割后返回列表

re.sub(pattern, repl, string, count=0, flags=0)

替换字符串中的匹配项

flags参数

说明

re.l

使匹配对大小写不敏感

re.L

做本地化识别匹配(locale-aware)

re.M

多行匹配,影响^和$

re.S

使.匹配包括换行在内的所有字符

re.U

根据Unicode字符集解析字符。这个标志影响\w,\W,\b,\B

re.X

该标志通过给予更灵活的格式以便你将正则表达式写得更容易理解

2.1 re.compile(pattern[, flags])

用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() search() 这两个函数使用。

>>> import re
>>> a = re.compile('\.com')
>>> a.findall('www.baidu.com')
['.com']

2.2 re.findall(pattern, string, flags=0)

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表。如果没有找到匹配的,则返回空列表

>>> import re
>>> re.findall('.*', 'hello')
['hello', '']
>>> re.findall('www.(\w+).com', 'www.baidu.com')
['baidu']
>>> re.findall('www.(?:\w+).com', 'www.baidu.com')
['www.baidu.com']
>>> re.findall('\\\\', 'abc\de')
['\\']
>>> re.findall(r'\\', 'abc\de')
['\\']

>>> re.findall('<a>(.*?)</a>',li)
['这个是内容', '这个是内容']
>>> li = '<div><ul><li><a>这个是内容</a></闪电></ul><ul><li><a>这个是内容</a></闪电></ul></div>'
>>> re.findall('<a>(.*)</a>',li)                  #贪婪匹配
['这个是内容</a></闪电></ul><ul><li><a>这个是内容']
>>> re.findall('<a>(.*?)</a>',li)                 #惰性匹配
['这个是内容', '这个是内容']

 

 

 

 

2.3 re.finditer(pattern, string, flags=0)

在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回

>>> import re
>>> a = re.finditer('\d', 'adf12345afds')
>>> print(next(a).group())
1
>>> print(next(a).group())
2
>>> print(next(a).group())
3
>>> print(next(a).group())
4
>>> print(next(a).group())
5


2.4 re.match(pattern, string, flags=0)

 

返回只在字符串开始匹配的对象。可以使用group() 或 groups() 匹配对象函数来获取匹配表达式

>>> import re
>>> html = "<a>这是一个超链接!</a>"
>>> re.match('<(\w+)>.*</(\w+)>',html)
<re.Match object; span=(0, 15), match='<a>这是一个超链接!</a>'>
>>> re.findall('<a>(.*)</a>',html)
['这是一个超链接!']

>>> ret = re.match('<a>(.*)</a>', html)           #分组匹配
>>> ret.group()
'<a>这是一个超链接!</a>'
>>> ret.group(1)
'这是一个超链接!'

2.5 re.serach(pattern, string, flags=0)

返回匹配到的第一个对象。可以使用group() 或 groups() 匹配对象函数来获取匹配表达式

>>> import re
>>> ret = re.search('(?P<id>\d{3})/(?P<name>\w{3})', 'weeew34ttt123/ooo')
>>> ret.group()
'123/ooo'
>>> ret.group('id')
'123'
>>> ret.group('name')
'ooo'

2.6 re.split(pattern, string[, maxsplit=0, flags=0])

按照能够匹配的子串将字符串分割后返回列表

>>> import re
>>> re.split('[b]', 'abcdabcdabcd')
['a', 'cda', 'cda', 'cd']
>>> re.split('[bd]', 'abcdabcdabcd')
['a', 'c', 'a', 'c', 'a', 'c', '']
>>> re.split('[ab]', 'abcdabcdabcd')
['', '', 'cd', '', 'cd', '', 'cd']


2.7 re.sub(pattern, repl, string, count=0, flags=0)

替换字符串中的匹配项

>>> import re
>>> re.sub('p.*n', 'world', 'hello,python')
'hello,world'
>>> re.sub('\d', 'abc', 'p1p2p3')
'pabcpabcpabc'

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值