import re

更新ing


元字符 描述 示例
[] 指定一个字符类 [a-z]
\ 转义 \d
. 匹配任意字符(除换行符) r..n
^ 起始于 ^r
$ 结束于 o$
* 零次或多次出现 w*
+ 一次或多次出现 i+
{} 确切地指定的出现次数 w{3}
| 两者任一 ab|git
() 捕获和分组 r(.*?)y
1
2
3
4
5
6
7
8
9
10
11
import re
print(re.search('[a-z]',"Rain4ky's 8log!")) #输出 <re.Match object; span=(1, 2), match='a'>
print(re.search(r'\d+', 'rain4ky.github.io')) #输出 <re.Match object; span=(4, 5), match='4'>
print(re.search('r..n', 'rain4ky.github.io')) #输出 <re.Match object; span=(0, 4), match='rain'>
print(re.search('^r', 'rain4ky.github.io')) #输出 <re.Match object; span=(0, 1), match='r'>
print(re.search('o$', 'rain4ky.github.io')) #输出 <re.Match object; span=(16, 17), match='o'>
print(re.search('w*', 'rain4ky.github.io')) #输出 <re.Match object; span=(0, 0), match=''>
print(re.search('i+', 'rain4ky.github.io')) #输出 <re.Match object; span=(2, 3), match='i'>
print(re.search('w{3}', 'www.rain4ky.github.io')) #输出 <re.Match object; span=(0, 3), match='www'>
print(re.search('ab|git', 'rain4ky.github.io')) #输出 <re.Match object; span=(12, 15), match='git'>
print(re.search('r(.*?)y', 'rain4ky.github.io')) #输出 <re.Match object; span=(0, 7), match='rain4ky'>

re.match

re.match确定正则是否从字符串的开头匹配。成功返回一个MatchObject,失败返回None。
语法:re.match(pattern,string,flags=0)

pattern为正则表达式
string为要匹配的字符串
flag用于控制正则表达式的匹配方式

1
2
3
4
5
6
7
8
import re
print(re.match('rain4ky', 'rain4ky.github.io')) # 在起始位置匹配
print(re.match('io', 'rain4ky.github.io')) # 不在起始位置匹配

#输出

<re.Match object; span=(0, 7), match='rain4ky'> # MatchObject
None

re.search扫描字符串,查找此正则匹配的任何位置.成功返回一个MatchObject,失败返回None。
语法:re.search(pattern, string, flags=0)

pattern为正则表达式
string为要匹配的字符串
flag用于控制正则表达式的匹配方式

1
2
3
4
5
6
7
8
import re
print(re.search('rain4ky', 'rain4ky.github.io')) # 在起始位置匹配
print(re.search('io', 'rain4ky.github.io')) # 不在起始位置匹配

#输出

<re.Match object; span=(0, 7), match='rain4ky'> # MatchObject
<re.Match object; span=(15, 17), match='io'> # MatchObject

re.compile

re.compile 函数用于编译正则表达式,生成一个Pattern对象。
语法:re.compile(pattern[, flags])

pattern为正则表达式
flag用于控制正则表达式的匹配方式

1
2
3
4
5
6
7
8
9
10
import re
pattern=re.compile(r'\d+')
result=pattern.search('rain4ky.github.io') #等价于result=re.match(r'\d+','rain4ky.github.io')
print(pattern)
print(result)

#输出

re.compile('\\d+') # Pattern
<re.Match object; span=(4, 5), match='4'> # MatchObject

re.findall

re.findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
语法:findall(pattern,string[, pos[, endpos]])

pattern为正则表达式
string为要匹配的字符串
pos指定字符串的起始位置,默认为0,可选参数
endpos指定字符串的结束位置,默认为字符串的长度,可选参数

1
2
3
4
5
6
import re
print(re.findall(r'\d+',"Rain4ky's 8log!"))

#输出

['4', '8']

flag参数 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

正则表达式对象

MatchObject

Pattern

参考链接

菜鸟教程 https://www.runoob.com/python/python-reg-expressions.html#flags
python官网 https://docs.python.org/zh-cn/3/howto/regex.html
w3school https://www.w3schools.cn/python/python_regex.asp