首页 > 编程语言 > 详细

Python正则表达式命名捕获组和非捕获组

时间:2020-07-28 10:38:33      阅读:125      评论:0      收藏:0      [点我收藏+]

命名捕获组

的格式是 (?p<name>...),其中 name 是组的名称,...是要匹配的表达式。它们的行为与正常组完全相同,除了可以通过索引访问还可以通过 group(name) 方式访问它们。非捕获组的格式是 (?:...)

import re

pattern = r"(?P<python>123)(?:456)(789)"
string = "123456789"

match = re.match(pattern,string)

if match:
    print(match.group("python"))
    print(match.groups())
123
(123, 789)

非捕获组

非捕获组值匹配结果,但不捕获结果,也不会分配组号,当然也不能在表达式和程序中做进一步处理。

import re

pattern = r"(?P<python>123)(?:456)(789)"
string = "123456789"

match = re.match(pattern,string)

if match:
    print(match.group("python"))#123
    print(match.groups())#(123, 789)

# 1.(?:pattern) : 匹配pattern,但不捕获匹配结果
s="industryOpqindustries"
res=re.findall("industr(?:y|ies)",s)
print(res)#[industry, industries]
# 2.(?=pattern): 零宽度正向预查(正向零宽断言),匹配后面跟的是pattern的内容,不匹配pattern,也不捕获匹配结果。

s="windows2019windows2018windows1989"
res=re.sub("windows(?=2018|1989)","microsoft",s)
print(res)#windows2019microsoft2018microsoft1989

# 3. (?!pattern): 零宽度负向预查(负向零宽断言),匹配后面跟的不是pattern的内容,不匹配pattern,不捕获匹配结果。
res=re.sub("windows(?!2018|1989)","microsoft",s)
print(res)#microsoft2019windows2018windows1989

# 4.(?<=pattern): 零宽度正向回查(正向零宽断言),匹配前面是pattern的内容,不匹配pattern,不捕获匹配结果。
s="windows2019microfost2019"
res=re.sub("(?<=microfost)2019","pattern",s)
print(res)#windows2019microfostpattern

# 5.(?<!pattern): 零宽度负向回查(负向零宽断言),匹配前面不是pattern的内容,不匹配pattern,不捕获匹配结果。
res=re.sub("(?<!microfost)2019","pattern",s)
print(res)#windowspatternmicrofost2019

 

Python正则表达式命名捕获组和非捕获组

原文:https://www.cnblogs.com/pfeiliu/p/13388728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!