Python re库

一、正则表达式

符号作用
*匹配前面字符0个或者多个
+匹配前面字符1个或者多个
匹配前面字符0个或一个

示例:

  1. ^5+$:表示必须全是5
  2. ^[0-9]+$:表示必须全是数字
符号作用
.匹配除了换行符外的任意一个字符
  1. ^.$:表示只能写一个随机内容
  2. ^[0-9]+.$:表示前面可以是无数数字,最后一位随便结尾(数字字母都可)
符号作用
^匹配行首
$匹配行尾
符号作用
[]只匹配一个字符,如[0-9]匹配一个数字
[^]表示不匹配什么
  1. ^[^0-9]+$:匹配除了数字以外一个或者多个内容
符号作用
{n}匹配前面字符确定的n次
{n,}匹配前面字符至少n次
{n,m}匹配前面字符至少n次最多m次
\转义字符
  1. ^[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不匹配英文数字下划线的任意组合
  1. 匹配只能输入汉字,英文,数字,下划线
    ^[\w\u4e00-\u9fa5]+$
    学习:可以在中括号‘或’条件直接书写

  2. 匹配长度6-12位只能包含英文数字
    ^[a-zA-Z0-9]{6,12}$

  3. [[:punct:]]:表示匹配标点符号

  4. 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模块

共同参数:

  1. re.I:忽略大小写
  2. 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值