python模块re
字符:
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
次数:
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
1)编译正则表达式
1 | p = re. compile ( 'ab*' , re.IGNORECASE) |
re.compile() 还接受一个可选的参数 flag,用于指定正则匹配的模式
-
re.IGNORECASE:忽略大小写,同 re.I。
-
re.MULTILINE:多行模式,改变^和$的行为,同 re.M。
-
re.DOTALL:点任意匹配模式,让'.'可以匹配包括'\n'在内的任意字符,同 re.S。
-
re.LOCALE:使预定字符类 \w \W \b \B \s \S 取决于当前区域设定, 同 re.L。
-
re.ASCII:使 \w \W \b \B \s \S 只匹配 ASCII 字符,而不是 Unicode 字符,同 re.A。
-
re.VERBOSE:详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。主要是为了让正则表达式更易读,同re.X。
2)match
match,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None
1 2 3 4 | match(pattern, string, flags = 0 ) # pattern: 正则模型 # string : 要匹配的字符串 # falgs : 匹配模式 |
无分组:
1 2 3 4 5 6 7 | origin = 'hello你好啊hehe我不好' patern = re. compile ( "h\w+" ) # r = re.match("h\w+", origin) r = patern.match(origin) print (r.group()) # 获取匹配到的所有结果 print (r.groups()) # 获取模型中匹配到的分组结果 print (r.groupdict()) # 获取模型中匹配到的分组结果 |
1 hello你好啊hehe我不好 2 () 3 {}
有分组:
1 origin='hello你好啊hehe我不好1' 2 r = re.match("h(\w+).*(?P<name>\d)$", origin) 3 print(r.group()) # 获取匹配到的所有结果 4 print(r.groups()) # 获取模型中匹配到的分组结果 5 print(r.groupdict()) # 获取模型中匹配到的分组中所有执行了key的组
1 2 3 | hello你好啊hehe我不好 1 ( 'ello你好啊hehe我不好' , '1' ) { 'name' : '1' } |
3)search
1 2 | # search,浏览整个字符串去匹配第一个,未匹配成功返回None # search(pattern, string, flags=0) |
1 # 无分组 2 3 origin='abcde你好啊hehe我不好1' 4 r = re.search("a\w+", origin) 5 print(r.group()) # 获取匹配到的所有结果 6 print(r.groups()) # 获取模型中匹配到的分组结果 7 print(r.groupdict()) # 获取模型中匹配到的分组结果 8 9 # 有分组 10 11 r = re.search("a(?P<hanzi>\w+).*(?P<name>\d)$", origin) 12 print(r.group()) # 获取匹配到的所有结果 13 print(r.groups()) # 获取模型中匹配到的分组结果 14 print(r.groupdict()) # 获取模型中匹配到的分组中所有执行了key的组
1 2 3 4 5 6 | abcde你好啊hehe我不好 1 () {} abcde你好啊hehe我不好 1 ( 'bcde你好啊hehe我不好' , '1' ) { 'hanzi' : 'bcde你好啊hehe我不好' , 'name' : '1' } |
4)findall
1 2 3 | # findall,获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中有多个组,则以列表形式返回,且每一个匹配均是元祖; # 空的匹配也会包含在结果中 #findall(pattern, string, flags=0) |
1 # 无分组 2 origin='abcde你好啊hehe我不好1' 3 r = re.findall("a\w+", origin) 4 print(r) 5 6 # 有分组 7 origin = "hello alex bcd abcd lge acd 19" 8 r = re.findall("a((\w*)c)(d)", origin) 9 print(r)
1 2 | [ 'abcde你好啊hehe我不好1' ] [( 'bc' , 'b' , 'd' ), ( 'c' , ' ', ' d')] |
5)sub
1 2 3 4 5 6 7 8 | # sub,替换匹配成功的指定位置字符串 sub(pattern, repl, string, count = 0 , flags = 0 ) # pattern: 正则模型 # repl : 要替换的字符串或可执行对象 # string : 要匹配的字符串 # count : 指定匹配个数 # flags : 匹配模式 |
1 origin = "hello alex bcd alex lge alex acd 19" 2 r = re.sub("a\w+", "999", origin, 2) 3 print(r)
1 | hello 999 bcd 999 lge alex acd 19 |
6)split
1 2 3 4 5 6 7 | # split,根据正则匹配分割字符串 split(pattern, string, maxsplit = 0 , flags = 0 ) # pattern: 正则模型 # string : 要匹配的字符串 # maxsplit:指定分割个数 # flags : 匹配模式 |
1 # 无分组 2 origin = "hello alex bcd alex lge alex acd 19" 3 r = re.split("alex", origin, 1) 4 print(r) 5 6 # 有分组 7 8 origin = "hello alex bcd alex lge alex acd 19" 9 r1 = re.split("(alex)", origin, 1) 10 print(r1) 11 r2 = re.split("(al(ex))", origin, 1) 12 print(r2)
1 2 3 | [ 'hello ' , ' bcd alex lge alex acd 19' ] [ 'hello ' , 'alex' , ' bcd alex lge alex acd 19' ] [ 'hello ' , 'alex' , 'ex' , ' bcd alex lge alex acd 19' ] |
7)常用正则表达式
1 2 3 4 5 6 | IP: ^( 25 [ 0 - 5 ]| 2 [ 0 - 4 ]\d|[ 0 - 1 ]?\d?\d)(\.( 25 [ 0 - 5 ]| 2 [ 0 - 4 ]\d|[ 0 - 1 ]?\d?\d)){ 3 }$ 手机号: ^ 1 [ 3 | 4 | 5 | 8 ][ 0 - 9 ]\d{ 8 }$ 邮箱: [a - zA - Z0 - 9_ - ] + @[a - zA - Z0 - 9_ - ] + (\.[a - zA - Z0 - 9_ - ] + ) + |
标签:
python模块
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!