2021.1.30课堂笔记(python中使用正则表达式)

Python正则表达式模块

re模块
常用方法

表达式说明
compile()用于编译正则表达式,生成一个正则表达式( Pattern )对象
match()查看字符串的开头是否符合匹配模式,如果匹配失败,返回none
search()扫描整个字符串并返回第一个成功的匹配
findall()在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
sub()替换字符串中的匹配项
符号说明示例
逐字匹配re.match(‘abc’, ‘abc123’) # match!
re.match(‘abc’, ‘123abc’) # not match!
|re.match(‘abc|xyz’, ‘xyz123’) # match!
.除换行符外匹配任意字符re.match(’.’, ‘123abc’) # match!
[…]匹配任意一组字符中的一个re.match(’[aAbc]’, ‘b’) # a, A, b, or c
re.match(’[a-c]’, ‘b’) # a to c
re.match(’[A-C0-9]’, ‘B’) # A to C and 0 to 9
[^…]匹配不在[]中的字符re.match(’[^A-Z0-9]’, ‘b’) # not A to Z nor 0 to 9
\d匹配任意数字re.match(r’\d’, ‘8’) # match!
\D匹配任意非数字re.match(r’\D’, ‘B’) # match!
符号说明示例
\w匹配字母数字及下划线re.match(r’\w’, ‘_’) # match!
\W匹配非字母数字及下划线re.match(r’\W’, ‘?’) # match!
\s匹配任意空白字符re.match(r’\s’, ’ ') # match!
\S匹配任意非空字符re.match(r’\S’, ‘#’) # match!
^匹配字符串的开头re.findall(’^[abc]’, ‘xabc’) # not found
$匹配字符串的末尾re.findall(’[c]$’, ‘cc cc’) # found one
\b匹配一个单词边界re.findall(r’\bc’, ‘cc cc’) # cc cc
\B匹配非单词边界re.findall(r’c\B’, ‘cc cc’) # cc cc
re*匹配0个或多个的表达式re.match(’[abc]*’, ‘xabc’) # match
re+匹配1个或多个的表达式re.match(’[abc]+’, ‘abcd’) # match
re?匹配0个或1个表达式re.match(’[abc]?’, ‘xabc’) # match
re{n}匹配n个前面的表达式re.match(’[abc]{2}’, ‘abc’) # match
re{n, m}匹配n到m次前面的表达式re.match(’[abc]{1,3}’, ‘abc’) # match

默认为贪婪匹配
re.match(’.{2,6}c’, ‘abcdcfchc’) # match ‘abcdcfc’
?为非贪婪匹配
re.match(’.{2,6}?c’, ’ abcdcfchc’) # match ‘abc’
0长度匹配
re.sub(‘a?’, ‘-’, ‘bb’) # result: ‘-b-b-’
re.sub(‘a*’, ‘-’, ‘bb’) # result: ‘-b-b-’

使用()分组

match=re.match(r'(\d+)', '123') 
groups=match.groups() 	#  groups is ('123',)
g1=match.group(1) 		#  g1 is '123'

match=re.match(r'(\d)(\d)(\d)', '123') 
groups=match.groups() 	#  groups is ('1', '2', '3')
g1=match.group(1) 		#  g1 is '1'
g2=match.group(2) 		#  g2 is '2'
g3=match.group(3) 		#  g3 is '3'

\1…\9匹配第n个分组的内容

ma = re.match(r'(\d(\d(\d)))\1\2\3', '123123233')
print(ma.groups())

解析 : 初始分为三组
组1: (\d(\d(\d))) 123123233
组2: (\d(\d(\d))) 123123233
组3: (\d(\d(\d))) 123123233
\1: 123123233
\2: 123123233
\3: 123123233

?:跳过分组

ma = re.match(r'(\d(?:\d(\d)))-\2',  '647-7')
print(ma.groups())

解析
初始分为三组:
组1: (\d(\d(\d))) 647-7
组2: (\d(\d(\d))) 647-7
组3: (\d(\d(\d))) 647-7
?:在组2中,所以组2被跳过了,所以有两个分组
组1: (\d(\d(\d))) 647-7
组2: (\d(\d(\d))) 647-7

符号说明示例
?=前向肯定界定符用\b\w+(?=ing\b)查找I’m singing while you’re dancing.匹配到sing danc
?!前向否定界定符\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字
?<=向后肯定界定符用(?<=\bre)\w+\b查找reading a book得到ading。
?<!向后否定界定符(?<![a-z])\d{7}匹配前面不是小写字母的七位数字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值