目录
- 拖拽代码滑条可以查看输出结果
value1|value2
作用: 类似于"或",优先查找value1
obj = re.findall("abc|dde","abcdde")#['abc', 'dde']
obj = re.findall("abc|dde","adde")#['dde']
(value)
作用:用于分组,分组编号从"1"开始
说明:在不同的方法中的返回值不同
#findall中,如果正则表达式用了分组,那么python只会保存组内的值,未分组的值就会被丢弃
obj = re.findall("(cd)123","cd123")#['cd']
#match中,如果正则表达式用了分组,那么python会保存所有与字符串开头所匹配的值,并且将组内的值再次保存在下一个位置
obj = re.match("(cd)123","cd123").group()#group(0) cd123,group(1) cd
#逻辑与match类似
obj = re.finditer("(cd)123","cd123")
#如果|没被包含在()中,则它的匹配范围是整个字符串。()相当于是限制了范围,同时发挥了分组和限制范围的作用
obj = re.match("(cd|ab)123","cd123").group()#group(0) cd123,group(1) cd
(?P<name>value)
作用:分组,对找到的值进行分组并赋予组名
'''
:param P:分组的名称
:param value:需要匹配的内容
'''
obj = re.findall("cd(?P<name>123)","cd123")#['123']
\number
作用:调用分组序号为number的表达式
'''
:param number:分组的编号
'''
obj = re.match(r"(123)asd\1","123asd123").group(1)
#group(0) 123asd123,group(1) 123
#相当于调用group中下标为1的字符串
(?P=name)
作用:调用分组名称为name的表达式
'''
:param name:分组的名称
'''
obj = re.match("(?P<id1>123)asdf(?P=id1)","123asdf123").group()
#group(0) 123asdf123,group(1) 123
特殊构造语法
说明:这里的"()"没有分组功能,更多的是限制范围的功能
(?:value)
作用:用于使用|或接数量词
obj = re.finditer("(?:123){1}","asd123123")#123 123
obj = re.finditer("(?:123){2}","asd123123") #123123
obj = re.finditer("(?:123){2}","1233")#none#对比案例
(?mode:value)
作用:选择匹配模式
'''
param mode:匹配模式
param mode:可选iLmsux
'''
obj = re.finditer("(?i:AsdF)123","asdf123")#asdf123#不区分大小写
(?#)
作用:注释
obj = re.finditer("(?#这个是注释)123asd","bnm123asd123")#123asd
(?=value)、(?!value)、(?<=value)、(?<!value)
作用:判断,相当于if
#(?=value)
obj = re.finditer(r"2ab(?=12)123","12ab123")
#如果2ab后面的字符串是12则继续匹配,否则直接结束
#(?!value) 逻辑与(?=value)相反,如果后面不是xx则继续匹配,否则结束匹配
#(?<=value) 如果前面...
#(?<!value) 如果前面...
(?(index/name)yes-value|no-value)
说明:如果存在值为index或name的分组,就匹配yes-value,否则匹配no-value
obj = re.finditer("(<)abcd(?(1)>|)","<abcd>")#<abcd>#如果不存在则不匹配
输出
#finditer用for循环取值,其他用 print(obj)
for o in obj:
print(o.group())