re库是Python关于正则表达式的一个内置模块,使用时无需下载,直接import即可。
这个模块提供与Perl语言中类似的正则表达式匹配操作,支持bytes和unicode两种格式的字符串,处理的字符串可以包含空字符以及超出ASCII码范围的字符(比如中文字符)。
本文主要来源是Python3.10.6 re库官方文档,提及的函数:
1 2 3 4 5 6
| re.match(),re.fullmatch(),re.search(),re.findall(),group(),groups() re.split() re.sub(),re.subn() re.compile(),re.finditer re.escape() re.purge()
|
1、查找
1 2 3 4 5
| import re re.match(pattern, string, flags=0) # 从字符串的起始位置匹配一个模式,匹配返回一个对象,不匹配返回none re.fullmatch(pattern, string, flags=0) # 整个字符串与正则完全匹配,返回一个对象,不匹配返回none re.search(pattern, string, flags=0) # 扫描整个字符串并返回第一个成功的匹配对象。 re.findall(pattern, string, flags=0) # 在字符串中找到匹配的所有子串,并返回一个列表,有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
|
- pattern:正则中的模式字符串。pattern形式:
r"正则"
- string:要被查找替换的原始字符串。
- flags:标志位,用于控制正则表达式的匹配方式
- re.I:不区分大小写
- re.M:多行匹配,影响 ^ 和 $
- re.S:使
. 匹配包括换行在内的所有字符
- re.U:根据Unicode字符集解析字符。这个标志影响 , , .
- re.L:做本地化识别(locale-aware)匹配
- re.X:该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
group(num) 或 groups()是匹配对象(match
object)的函数,可用来获取匹配到的内容(获取整体或括号的捕获内容)。group(0)和group()效果相同,均为获取取得的字符串整体,group(n)返回第n组括号匹配的字符,groups()
返回所有括号匹配的字符,以tuple格式。
eg:
1 2 3 4 5 6 7 8 9 10 11 12
| import re str = "Hello World WoHe"
re.match(r"he",str,flags=re.I)
re.match(r"wo",str,flags=re.I)
re.fullmatch(r"^H\w+\s\w+\s\w+",str)
re.search(r"wo",str,flags=re.I)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| re.search(r"([a-zA-Z]*)\s([a-zA-Z]*)\s([a-zA-Z]*)",str).group()
re.search(r"([a-zA-Z]*)\s([a-zA-Z]*)\s([a-zA-Z]*)",str).group(0)
re.search(r"([a-zA-Z]*)\s([a-zA-Z]*)\s([a-zA-Z]*)",str).group(1)
re.search(r"([a-zA-Z]*)\s([a-zA-Z]*)\s([a-zA-Z]*)",str).group(2)
re.search(r"([a-zA-Z]*)\s([a-zA-Z]*)\s([a-zA-Z]*)",str).group(3)
re.search(r"([a-zA-Z]*)\s([a-zA-Z]*)\s([a-zA-Z]*)",str).groups()
|
1 2 3
| str = "Apple Banana Pear App applet Bear" re.findall(r"\bA\w+",str,flags=re.I)
|
2、替换
1 2 3
| import re re.sub(pattern, repl, string, count=0, flags=0) re.subn(pattern, repl, string, count=0, flags=0)
|
- pattern : 正则中的模式字符串。pattern形式:
r"正则"
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
1 2 3 4 5 6
| re.sub(r"(?=9)",",","123456789")
re.sub(r"(?=a)",".","AAAAAAAA",count=3,flags=re.I)
re.subn(r"(?=a)",".","AAAAAAAA",count=3,flags=re.I)
|
3、分隔
1
| re.split(pattern, string, maxsplit=0, flags=0)
|
1 2 3
| str="1a2b3c" re.split(r"\d",str,maxsplit=2)
|
4、正则表达式复用
一个脚本中,若多次使用到同一个正则表达式,为提高效率,可使用re.compile()生成一个正则表达式的对象,进行多次复用。
1
| re.compile(pattern,flags=0)
|
1 2 3 4 5 6 7 8 9
| str = 'ads456' fnum = re.compile(r"\d+") fnum.search(str)
str1 = 'fadskgf' falp = re.compile(r"(AD)+",flags=re.I) falp.search(str1)
|
1 2 3 4
| str = "Apple Banana Pear App applet Bear" fia = re.compile(r"\bA\w+",flags=re.I) fia.findall(str)
|
5、迭代器
1
| re.finditer(pattern, string, flags=0)
|
1 2 3 4 5 6 7 8
| str="1a2b3c" it = re.finditer(r"\d",str) for i in it: print(i.group())
1 2 3
|
6、其他
推荐阅读:
1、re — Regular
expression operations — Python 3.10.6 documentation 2、Python
正则表达式 | 菜鸟教程 (runoob.com) 3、Regular Expression
HOWTO — Python 3.10.6 documentation
4、https://zhuanlan.zhihu.com/p/361601136