一、正则表达式
符号 | 作用 |
---|---|
* | 匹配前面字符0个或者多个 |
+ | 匹配前面字符1个或者多个 |
? | 匹配前面字符0个或一个 |
示例:
^5+$
:表示必须全是5^[0-9]+$
:表示必须全是数字
符号 | 作用 |
---|---|
. | 匹配除了换行符外的任意一个字符 |
^.$
:表示只能写一个随机内容^[0-9]+.$
:表示前面可以是无数数字,最后一位随便结尾(数字字母都可)
符号 | 作用 |
---|---|
^ | 匹配行首 |
$ | 匹配行尾 |
符号 | 作用 |
---|---|
[] | 只匹配一个字符,如[0-9]匹配一个数字 |
[^] | 表示不匹配什么 |
^[^0-9]+$
:匹配除了数字以外一个或者多个内容
符号 | 作用 |
---|---|
{n} | 匹配前面字符确定的n次 |
{n,} | 匹配前面字符至少n次 |
{n,m} | 匹配前面字符至少n次最多m次 |
\ | 转义字符 |
^[0-9]{5,10}$
:匹配数字长度为5-10位(用法和* + ?类似)
符号 | 作用 |
---|---|
(?:a|b) | 重点:匹配组合 举例:`nizh(?:a |
(?=a) | 重点:匹配前面的内容 举例:`nizh(?=a |
(?!a) | 重点:匹配前面的内容 举例:`nizh(?!a |
(?<=a) | 重点:反向匹配 举例:`(?<=a |
(?<!a) | 重点:反向匹配 举例:`(?<!a |
符号 | 作用 |
---|---|
\d | 匹配0-9的数字 |
\w | 匹配英文数字下划线的任意组合 |
\D | 不匹配0-9的数字 |
\W | 不匹配英文数字下划线的任意组合 |
-
匹配只能输入汉字,英文,数字,下划线
^[\w\u4e00-\u9fa5]+$
学习:可以在中括号‘或’条件直接书写 -
匹配长度6-12位只能包含英文数字
^[a-zA-Z0-9]{6,12}$
-
[[:punct:]]
:表示匹配标点符号 -
key:\/.\/(.*key)[a-z]
:匹配示例:key:/w/123keya
贪婪匹配与非贪婪匹配:
举例:aa<div>test1</div>bb<div>test2</div>cc
5. 贪婪匹配:<div>.*</div>
-><div>test1</div>bb<div>test2</div>
6. 非贪婪匹配:<div>.*?</div>
-><div>test1</div>
实例:
import re
data = '''
<h2><a id="break_20"></a>break</h2>
<h2><a id="continue_63"></a>continues</h2>
<h2><a id="continue_63"></a>continuesffff</h2>
'''
rule = "<h2><a .*></a>(.+)</h2>"
print(re.findall(rule,data,re.S)) # ['continuesffff']
datab = '''
<h2><a id="break_20"></a>break</h2>
<h2><a id="continue_63"></a>continues</h2>
<h2><a id="continue_63"></a>continuesffff</h2>
'''
ruleb = "<h2><a .*?></a>(.*?)</h2>"
print(re.findall(ruleb, datab, re.S))# ['break', 'continues', 'continuesffff']
二、re模块
共同参数:
re.I
:忽略大小写re.S
:匹配换行在内的所有字符(不添加这个默认是一行一行进行匹配内容)
1. 匹配内容
知识点:匹配内容的时候实际上是匹配正则小括号里面的内容,如img(.*)me
实际就是匹配img和me中间的内容
1.1 search
介绍:只能返回首次匹配的内容,有几个小括号返回的元组长度就是多长
格式:re.search(规则,数据,共同参数)
注意:匹配不到报错
import re
data = '''
imglikeme51551
imglikeme51551
'''
rule = 'img(.*)me(.*)1551'
a = re.search(rule, data).groups()
print(a) #('like', '5')
ruleb = 'img(.*)me(.*)1551'
ab = re.search(ruleb, data, re.S).groups()
print(ab) #('likeme51551\nimglike', '5')
1.2 findall
介绍:返回个列表,会一直匹配到底
格式:re.findall(规则,数据,共同参数)
注意:匹配不到返回空列表;匹配只能到最后一项看上面的贪婪与非贪婪
import re
data = '''
imglikeme51551
imglikeme51551
'''
rule = 'img(.*)me(.*)1551'
a = re.findall(rule, data)
print(a) # [('like', '5'), ('like', '5')]
ruleb = 'img(.*)me(.*)1551'
ab = re.findall(ruleb, data, re.S)
print(ab) # [('likeme51551\nimglike', '5')]
2. 识别格式
2.1 match
介绍:与前面的不同,默认从开头开始匹配(结尾有要求自己加$
)
格式:re.match(规则,数据,共同参数)
注意:匹配不到返回None,匹配成功返回元组
import re
data = '''imglikeme51551
imglikeme51551
'''
rule = 'img'
a = re.match(rule, data) # 默认从开头开始匹配
print(a.group()) # img
datab = '112345678m'
ruleb = '^[1-9]{1}[0-9]{8}[a-z]{1}$' # 第一位数字范围1-9,后面挨着的8位数字范围0-9,最后一位是a-z的小写字母
ab = re.match(ruleb, datab)
print(ab.group()) # 112345678m