目录
字符相关的 正则表达式规则
方式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')]