re模块
1.什么是正则表达式?
普通字符和元字符构成的字符串,描述一类字符串规则
2.什么是元字符?
有特殊含义的符号
3.匹配规则
匹配符-纵向-字符组
-
[ ]匹配一个字符 [abc] # 表示匹配a b c 其中任意一个 [^abc] # [^表示匹配除了a b c 外其中任意一个] [a-zA-Z0-9] # 表示匹配 小写字母/ 大写字母/ 数字 其中任意一个
-
\d = [0-9] \D = [^0-9] \w = [a-zA-Z0-9_] # 数子、小写字母、大写字母和下划线 \W = [^a-zA-Z0-9_] \s = [\t\v\n\r\f] # 匹配空白符(空格、水平制表符、垂直制表符、换行符、回车符、换页符) \S = [^\t\v\n\r\f] # 匹配非空白符 . = [^\n\r\u2028\u2029] # 通配符,不匹配 换行符 回车符 行分隔符 段分隔符
多选分支
-
(a|b|c) # 或的关系 [a|b|c] # 或的关系
匹配符-横向-量词
-
X{m,n} # x匹配m到n次 X{m,} # x匹配至少m次 X{m} # x匹配m次
-
X* # X匹配任意次数,包括0次 X+ # X至少匹配一次 X? # X匹配0次或一次
贪婪模式和惰性模式
-
贪婪模式 惰性模式 {m,n}? {m,}? ? ?? + +? * *?
4.匹配函数
flags修饰符
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
re.findall
功能:根据正则表达式匹配目标字符串内容
re.findall(正则表达式,需要匹配的字符,flags=0)
返回值:匹配到的内容列表,【如果正则表达式有子组则只能获取子组对应的内容】
import re
#
print(re.findall('\w','adc123_*()-='))
>>> ['a','b','c','1','2','3','_']
re.match
从字符串开始位置匹配,匹配开头,匹配不成功返回None
import re
a = 'python'
print(re.match('p',a).group())
>>> p
re.seach
扫描这个字符串,返回第一个成功匹配的结果
import re
a = 'py11t22ho33n'
print(re.seach('\d+',a).group())
>>> 11
re.compile
功能:生产正则表达式对象,避免重复定义相同的规则
使用compile创建的对象,不用传入正则表达式了
用compile创建的对象
调用其他方法时候(str,start,end)
str:目标字符串
start:截取目标字符串开始位置
end:截取目标字符串结束位置
和直接使用re相比,多了截取功能
import re
a = '/index/id=224452454'
pattern = '/index/?id=\d'
# 普通
l = re.match(res,a).group()
print(l)
>>> /index/id=2
# 使用complie(不用传入正则表达式了)
regex = re.compile(pattern) # 定义好后直接可以无限制调用
l = regex.match(a).group()
print(l)
>>> /index/id=2
案列
import re
string = """Merged by land 111-222-333-444 to #43457668
Verify token xxx1xxx1xxx1
1/1 holo_frontend https://nkippis.com
Merged by land 555-666-777-888 to #43457668
Verify token xxx2xxx2xxx2
1/1 holo_frontend https://nkippis.com
Discussed-in: Merge-Request 8888888, URL: https://nkippis.com
Discussed-in: Merge-Request 9999999, URL: https://nkippic.com
"""
regex = re.compile('Merged by land (.*?) ')
merged_list = regex.findall(string)
print(merged_list) # ['111-222-333-444', '555-666-777-888']
regex = re.compile('Verify token (.*)')
token_list = regex.findall(string)
print(token_list) # ['xxx1xxx1xxx1', 'xxx2xxx2xxx2']
re.sub
替换,返回替换后的字符串
re.sub(正则patten,替换字符repl,被匹配字段string,替换次数count,flags=0)
import re
res = re.compile('\d+')
a = 'py454thon464aaa'
print(re.sub(res,'++',a))
>>> py++thon++aaa
re.split
分割,返回切割后的列表
re.split(正则patten,被匹配字段string,分割次数maxsplit,flags=0)
import re
res = re.compile('\d+')
a = 'py454thon464aaa'
print(re.split(res,a))
>>> ['py','thon','aaa']
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律