[正则]特殊构造语法+分组输出+| Python

目录

  • value1|value2
  • (value)
  • (?P\value)
  • \number
  • (?P=name)
  • 特殊构造语法
    • (?:value)
    • (?mode:value)
    • (?#)
    • (?=value)、(?!value)、(?<=value)、(?
    • (?(index/name)yes-value|no-value)
  • 输出


  • 拖拽代码滑条可以查看输出结果

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

(?Pvalue)

作用:分组,对找到的值进行分组并赋予组名

'''
:param P:分组的名称
:param value:需要匹配的内容
'''
obj = re.findall("cd(?P123)","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("(?P123)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)、(?

作用:判断,相当于if

#(?=value)
obj = re.finditer(r"2ab(?=12)123","12ab123")
#如果2ab后面的字符串是12则继续匹配,否则直接结束
#(?!value)  逻辑与(?=value)相反,如果后面不是xx则继续匹配,否则结束匹配
#(?<=value) 如果前面...
#(?

(?(index/name)yes-value|no-value)

说明:如果存在值为index或name的分组,就匹配yes-value,否则匹配no-value

obj = re.finditer("(<)abcd(?(1)>|)","")##如果不存在则不匹配

输出

#finditer用for循环取值,其他用 print(obj)
for o in obj:
    print(o.group())

你可能感兴趣的:(正则表达式,python,正则表达式,爬虫)