正则表达式

- List item

字符相关的 正则表达式规则

方式1
使用 [] 可以匹配范围[0-9][a-z]
[ ] 搜寻方括号之内的任何信息
在这里插入图片描述
方式2
固定q 为首 后续元素在[ abc] 的字符串
在这里插入图片描述
方式3
使用【^ abc】 匹配除abc之外其他字符 在这里插入图片描述
方式4
可以匹配以t 为首后面是a-z的任一字符
在这里插入图片描述

方式5

. 代指任意一个字符

在这里插入图片描述
.只能取代一个任意值

方式6

.+ 代指任意不限个数字符(贪婪匹配)

正则表达式在进行匹配的过程中,遵循一个贪婪匹配的原则
在这里插入图片描述
即使前面有先满足条件的,也会输出最长的

方式6

.?+ 代指任意不限个数字符(非贪婪匹配)

在这里插入图片描述
方式7‘

\w可以代替字母数字下划线以及中文

在这里插入图片描述
\w 指代字母数字下划线以及汉字 但不包括空格
通配原则是 贪婪原则
以上图为例 由于\w是不包含空格
当text包含空格时
该通配符会 生成两段
当把text中空格删去后
根据贪婪原则,找到的字段是一个完整的[‘魏xiangyin相印珠海魏xiangyi’]
讲这么废话,实质是\w可以代替字母数字下划线以及中文

方式8

\d 代指数字

在这里插入图片描述

\d 代表数字

\s 代指空格

在这里插入图片描述

数量相关的 正则表达式规则

* 重复0次 或 n 次

在这里插入图片描述
以该图为例:

固定 大
2后面有个* 表示 2可以出现1次 多次 或者0次
固定 B

+ 重复一次或多次

在这里插入图片描述

? 重复0次 或 1次 类似True False

在这里插入图片描述

上文中出现?将原本贪婪匹配转为非贪婪匹配

{n} 重复n次

在这里插入图片描述
这种方法可以用于搜索 某某开头的电话号码

{n,}重复n次或者更多次

在这里插入图片描述
比如说查找以 47开头的qq号,qq号的位数是不一样的

re.findall("47\d{6,}",text)

{n,m} 重复出现n-m次

**在这里插入图片描述**
比如查找在10-15位长度的数字

re.findall("\d{10,15}", text)

在这里插入图片描述

分组 正则表达式规则

使用圆括号提取分组内内容
在这里插入图片描述
括号不影响匹配结果
括号会筛选出范围内的数据

import re
text = "楼主15131root太牛逼了,在线想要442662578@qq.com和xxxxx@1ive.com谢谢楼
主,手机号也可15131255789,搞起来啊"
data_list =re.findall("15131(2\d{5}|r\w+太)", text)
print(data_list)
# 输出 ['root太', '255789']
import re
text = "楼主15131root太牛15131alex逼了,在线想要442662578@qq.com和xxxxx@1ive.com谢谢楼主,手机号也可15131255789,搞起来啊"
data_list1 = re.findall("(15131(2\d{5}|r\w+太))", text)
print(data_list1)
# 输出 [('15131root太', 'root太'), ('15131255789', '255789')]

| 表示“或”条件

import re

text = "楼主15131root太牛逼了,在线想要442662578@qq.com和xxxxx@1ive.com谢谢楼主,手机号也可15131255789,搞起来啊"
data_list =re.findall("(15131(2\d{5}|r\w+太))", text)

print(data_list)

[('15131root太', 'root太'), ('15131255789', '255789')]

如果在正则表达式身上套一个括号,那么输出会以元组方式 搜索结果和限制范围结果

实战

QQ号检索

尝试1
data_list =re.findall("\d+", text)

问题:首位数字没有限制不能为0

尝试2
data_list =re.findall("[1-9]\d+", text)

如果在能限制长度就好了
data_list =re.findall("[1-9]\d{4,}", text)

身份证检索

data_list =re.findall("\d{17}[\dX]", text)

中括号 [ \d X ] 代表这一位置 可以是数字 或者 X 这种有一个局限性
只能对一个字符进行

使用(\d | X ) 在只有一个字符要检索时与方括号无异,但是当需要对两位及以上的字符串进行检索。就只能使用或操作进行检索了
一开始我还试想,如果检索 “ab”
使用两个 ~~~~还是不合适

text= "dsf320324199609296511dsf32032419960929651x"
data_list =re.findall("\d{17}[\dx]", text)
data_list =re.findall("\d{17}\d|x", text)
data_list =re.findall("\d{17}(\d|x)", text)
print(data_list)

如果使用 或操作 需要使用圆括号
使用圆括号存在的问题,他只会输出括号内限制的内容
我们这时需要在最外层套一个圆括号
输出元组,在使用元组的索引得到检索结果

data_list =re.findall("(\d{6}\d{4}\d{2}\d{2}(\d{4}|\d{3}x))", text)

[('320324199609296511', '6511'), ('32032419960929651x', '651x')]


data_list =re.findall("(\d{6})(\d{4})(\d{2})(\d{2})(\d{4}|\d{3}x)", text)
[('320324', '1996', '09', '29', '6511'), ('320324', '1996', '09', '29', '651x')]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值