正则表达式知识点总结

正则表达式,知识点,总结 · 浏览次数 : 8

小编点评

```python import re # 贪婪模式:匹配满足表达式的最大内容 re.findall(r'<.*>','<div><p><p><div>') # 查找的过去又回来# ['<div><p><p><div><span>'] # 非贪婪模式:匹配满足表达式的最小内容 re.findall(r'<.*?>','<div><p><p><div><span>') # ['<div>', '<p>', '<p>', '<div>', '<span>'] # 打印匹配的结果 print(re.search(r'32\\b','2@x_小平,32,JLsswomnm,23445532')) print(re.search(r'(234)','2@x_小平,32,JLsswomnm,23445234532')) print(re.search(r'234','2@x_小平,32,JLsswomnm,23445234532')) print(re.search(r'2','2@x_小平,32,JLsswomnm,23445f2234532')) print(re.search(r'22','2@x_小平,32,JLsswomnm,23445f2234532')) print(re.search(r'2{2}','2@x_小平,32,JLsswomnm,23445f2234532')) print(re.search(r'2{1,}','2@x_小平,32,JLsswomnm,23445f222223453222')) print(re.search(r'2{0,2}','2@x_小平,32,JLsswomnm,23445f222223453222')) print(re.search(r'2*','2@x_小平,32,JLsswomnm,23445f222223453222')) print(re.search(r'2{0,1}','2@x_小平,32,JLsswomnm,23445f222223453222')) ``` 运行截图: ``` <div><p><p><div><span> <div><p><p><div><span> <div><p><p><div><span> <div><p><p><div><span> <div><p><p><div><span> <div><p><p><div><span> <div><p><p><div><span> <div><p><p><div><span> <div><p><p><div><span> ```

正文

第一部分:正则表达式 概念

一个函数: re.findall(pattern, string)

一些元字符: .  *  ?  +  []  ()  \  ^  $

通过 () 来改变 findall 的行为

 例1: 判断一个手机号码(长度、开头数字为1、只能是数字)

import re
a=12345678901
def check_phone(phone):
    str_ph=str(phone)
    # 普通写法
    # if str_ph.isdigit() and len(str_ph)==11 and str_ph.startswith('1'):
    # 使用正则表达式写法,代码简约了很多
    if re.search(r'^1\d{10}$',str_ph):  # 第二个参数是个字符串,是对传进去的字符串处理,高效的处理文本
        print(str_ph)
    else:
        print('请输入正确的手机号:')

check_phone(a) # 调用

运行截图:

 如果输入a=22345678901

运行截图:

例2:search、match、finall 练习

print(re.search(r'^1\d{10}','222233442')) # r是取消/换行  None
# 从左到右匹配满足条件的
print(re.search(r'5','45455498765'))
# <_sre.SRE_Match object; span=(1, 2), match='5'>
# 从左到右匹配的,匹配第一个55(通过下标从3-5)
print(re.search(r'55','45455498765'))
# <_sre.SRE_Match object; span=(3, 5), match='55'>
# 匹配所有的5
print(re.findall(r'5','45455498765'))
# ['5', '5', '5', '5']
# 匹配开头
print(re.match(r'45','45455498765'))
# <_sre.SRE_Match object; span=(0, 2), match='45'>
print("================================================")
r=re.match(r'45','454554598765')
print(r)  # 所匹配的对象
print(r.start()) # 匹配的开始位置
print(r.end()) # 匹配的结束位置
print(r.span()) # 开始和结束位置
print(r.group()) # 所匹配到的字符
print("================================================")
# 43455498765
s='45455498765'
print(s[0:2])  # 用切片切45
print(re.match(r'45','43455498765')) # None

运行截图:

 第二部分:元字符

思考:

什么是元字符?
本身具有特殊含义的字符
常用的元字符:. ^ $ {} * + ? | []

import re
print(re.search(r'.','小平32sswomnm2344553')) # 匹配任意一个字符
# <_sre.SRE_Match object; span=(0, 1), match='小'>
print(re.search(r'\d','小平32sswomnm2344553')) # 匹配数字
# <_sre.SRE_Match object; span=(2, 3), match='3'>
print(re.search(r'\D','小平32sswomnm2344553')) # 匹配非数字
# <_sre.SRE_Match object; span=(0, 1), match='小'>
print(re.search(r'\s','小平\t32sswomnm\n234 4553')) # 匹配空白符
# <_sre.SRE_Match object; span=(2, 3), match='\t'>
print(re.search(r'\s','小 平\t32sswomnm\n234 4553')) # 匹配空白符
# <_sre.SRE_Match object; span=(1, 2), match=' '>
print(re.search(r'\S','小平32sswomnm2344553')) # 匹配非空白符
# <_sre.SRE_Match object; span=(0, 1), match='小'>
print(re.search(r'\w','@_小平32sswomnm2344553')) # 匹配所有除特殊字符以外(@ 为特殊字符)
# <_sre.SRE_Match object; span=(1, 2), match='_'>
print(re.search(r'\W','@_小平32sswomnm2344553')) # 匹配特殊字符
# <_sre.SRE_Match object; span=(0, 1), match='@'>
print(re.search(r'\W','%_小平32sswomnm2344553')) # 匹配特殊字符
print(re.search(r'[0-9]','@_小平32sswomnm2344553')) # 匹配一段范围
# <_sre.SRE_Match object; span=(4, 5), match='3'>
print(re.findall(r'[0-9]','@_小平32sswomnm2344553')) # 匹配一段范围
# ['3', '2', '2', '3', '4', '4', '5', '5', '3']
print(re.search(r'[a-z]','@_小平32sswomnm2344553')) # 匹配一段范围
# <_sre.SRE_Match object; span=(6, 7), match='s'>
print(re.findall(r'[a-z]','@_小平32JLsswomnm2344553')) # 匹配一段范围(小写)
# ['s', 's', 'w', 'o', 'm', 'n', 'm']
print(re.findall(r'[A-z]','@_小平32JLsswomnm2344553')) # 匹配一段范围(大小写)
# ['_', 'J', 'L', 's', 's', 'w', 'o', 'm', 'n', 'm']
print(re.findall(r'[a-z0-9]','@_小平32JLsswomnm2344553'))
# ['3', '2', 's', 's', 'w', 'o', 'mddddddddd', 'n', 'm', '2', '3', '4', '4', '5', '5', '3']
print(re.findall(r'[0-5a-z]','@_小平32JLsswomnm2344553'))
print('=============================================================================')
print(re.findall(r'[*]','@_小平32JL*ss*womnm234*4553')) # 匹配所有*
# ['*', '*']
print(re.findall(r'\.','@_小平32.JL*ss*womnm234*455.3')) # 匹配所有点
# ['.', '.']
print(re.findall(r'4|5','@_小平32JLsswomnm2344553')) # 或
# ['4', '4', '5', '5']
print(re.findall(r'^2','@_小平32JLsswomnm2344553')) # 匹配开头
# []
print(re.findall(r'^2','2@_小平32JLsswomnm2344553')) # 匹配开头
# ['2']
# print(re.findall(r'$2','2@_小平32JLsswomnm2344553')) # 结尾(从左到右查看2应该在$之前)
print(re.findall(r'2$','2@_小平32JLsswomnm23445532'))
# ['2']
print(re.findall(r'\b32','2@_小平,32,JLsswomnm,23445532')) # 单词边界
# ['32']
print('---------------------------------------------------------------------')
print(re.search(r'\b32','2@_小平,32,JLsswomnm,23445532'))
# <_sre.SRE_Match object; span=(6, 8), match='32'>
print(re.search(r'32\b','2@x_小平,32,JLsswomnm,23445532')) # 边界
# <_sre.SRE_Match object; span=(6, 8), match='32'>
print(re.search(r'(234)','2@x_小平,32,JLsswomnm,23445234532'))
# <_sre.SRE_Match object; span=(20, 23), match='234'>
print(re.search(r'234','2@x_小平,32,JLsswomnm,23445234532')) # 可以不写括号
print(re.findall(r'234','2@x_小平,32,JLsswomnm,23445234532')) # ['234', '234']
print(re.findall(r'f(234)','2@x_小平,32,JLsswomnm,23445f234532'))
# ['234']   匹配f后面的'234' 称为分组匹配(精确匹配)
print('=================================================================================')
print(re.findall(r'2','2@x_小平,32,JLsswomnm,23445f2234532'))
print(re.findall(r'22','2@x_小平,32,JLsswomnm,23445f2234532'))
print(re.findall(r'2{2}','2@x_小平,32,JLsswomnm,23445f2234532')) # {2} 表示个数
# ['22']
print(re.findall(r'2{1,}','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小个数,无穷大(最大不写的情况下)
# ['2', '2', '2', '22222', '222']
print(re.findall(r'2{1,2}','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小个数为一个2,最大个数为两个2
# ['2', '2', '2', '22', '22', '2', '22', '2']
print(re.findall(r'2{0,2}','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小个数为空,最大个数为两个2
# ['2', '', '', '', '', '', '', '', '2', '', '', '', '', '', '', '', '', '', '', '', '2', '', '',
#  '', '', '', '22', '22', '2', '', '', '', '', '22', '2', '']
print(re.findall(r'2*','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小0 ,最大无穷大
print(re.findall(r'2+','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小个数为一个 ,最大无穷大
# ['2', '2', '2', '22222', '222']
print(re.findall(r'2?','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小0 ,最大1个
# ['2', '', '', '', '', '', '', '', '2', '', '', '', '', '', '', '', '', '', '', '', '2', '',
# '', '', '', '', '2', '2', '2', '2', '2', '', '', '', '', '2', '2', '2', '']
print(re.findall(r'2{0,1}','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小0 ,最大1个
# ['2', '', '', '', '', '', '', '', '2', '', '', '', '', '', '', '', '', '', '', '', '2',
# '', '', '', '', '', '2', '2', '2', '2', '2', '', '', '', '', '2', '2', '2', '']

运行截图(部分):

贪婪模式:(匹配满足表达式的最大内容

import re
print(re.findall(r'<.*>','<div><p><p><div>'))  # .代表任意字符,* 所有  匹配到所有
# ['<div><p><p><div>']
print(re.findall(r'<.*>','<div><p><p><div><span>'))# 查找的过去又回来
# ['<div><p><p><div><span>']
# 非贪婪模式:匹配满足表达式的最小内容
print(re.findall(r'<.*?>','<div><p><p><div><span>'))
# ['<div>', '<p>', '<p>', '<div>', '<span>']

运行截图:

 

========每天最大的兴趣就是赚钱、写代码、学知识

与正则表达式知识点总结相似的内容:

正则表达式知识点总结

第一部分:正则表达式 概念 一个函数: re.findall(pattern, string) 一些元字符: . * ? + [] () \ ^ $ 通过 () 来改变 findall 的行为 例1: 判断一个手机号码(长度、开头数字为1、只能是数字) import re a=12345678901

OOP第二阶段题集总结

一.前言 知识点:考察继承和多态为多,其中还涉及迭代器的使用,在每个题集中都有一个综合性题目设计多方面知识点考试,有List类和HashMap的使用以及正则表达式的运用,并且注重考查设计,理解类与类之间的关系进行合理设计,其中也要遵循我们所学的单一职责,开闭原则,迪米特法则等。 题量:第四次题集和第

[转帖]Jmeter跨线程组传参

https://www.cnblogs.com/a00ium/p/10462576.html 我们知道,同一线程组中可以通过“正则表达式提取器”获取其中一个取样器的响应结果中的参数,直接传给线程组中的其他取样器。但其他线程组中的取样器也想使用同样的参数时,无法直接获取。举个例子: 提取“登录”取样器

正则表达式

正则表达式 import re 限定符(quantifier) a* a出现0次或者多次 a+ a出现1次或者多次 a? a出现0次或者一次 a{6} a出现6次 a{2,6} a出现2-6次 a{2,} a出现两次以上 或运算符(OR Operator) (a|b) 匹配 (ab)|(cd) 匹配

正则表达式中 “$” 并不是表示 “字符串结束

作者:Seth Larson 译者:豌豆花下猫@Python猫 英文:Regex character “$” doesn't mean “end-of-string” 转载请保留作者及译者信息! 这篇文章写一写我最近在用 Python 的正则表达式模块(re)开发 CPython 的 SBOM 工具

[转帖]正则表达式技巧与注意事项

https://www.cnblogs.com/codelogs/p/16060052.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介# 现如今,正则表达式几乎是程序员的必备技能了,它入手确实很容易,但如果你不仔细琢磨学习,会长期停留在正则最基本的用法

正则表达式学习

第一个: 过滤guid相关的信息 egrep ^[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}$ 第二个: 反编译代码 time for i in `find . \( -path ./var -

[转帖]正则表达式边玩边学

最近在学习极客时间的《正则表达式入门课》,感觉很适合入门玩,所以简单作一些笔记方便查找参考。 正则,就是正则表达式,英文是 Regular Expression,简称 RE。顾名思义,正则其实就是一种描述文本内容组成规律的表示方式。在编程语言中,正则常常用来简化文本处理的逻辑。在 Linux 命令中

[转帖]正则表达式及在Jmeter中的应用

目录 1.正则表达式 1.1 什么是正则表达式 1.2 为什么使用正则表达式 2.语法 2.1 普通字符 2.2 限定符 2.3 非打印字符 2.4 特殊字符 2.5 定位符 2.6 修饰符(标记) 2.7 选择 2.8 运算符优先级 3.常用正则表达式及在线工具 4.Jmeter之正则表达式提取器

正则表达式总结-1

转载 正则表达式真的很强,可惜你不会写 正则表达式是一种强大的文本处理工具,它允许你根据一定的规则来搜索、匹配、替换和验证文本,适配各种编程语言。 应用场景 正则表达式在计算机领域有广泛的应用,包括: 1、文本搜索和匹配:查找特定模式的字符串,如搜索包含特定关键词的文档。 2、数据验证:验证用户输入