Python 正则表达式中的捕获和非捕获分组

2023-04-02 00:00:00 捕获 分组 正则表达式

在 Python 的正则表达式中,捕获组和非捕获组是两种常用的分组方式。它们都可以用来匹配模式中的子字符串,但在匹配后的结果中的行为有所不同。

捕获组使用圆括号来标识,可以通过在圆括号内指定要匹配的模式来创建。当正则表达式与输入字符串匹配时,任何被捕获的组都会保存在结果中,可以通过 group() 方法或索引访问它们。

非捕获组使用“(?:)”的语法来创建,它们也可以用来匹配模式中的子字符串,但是与捕获组不同,非捕获组匹配的结果不会被保存在结果中,也无法通过 group() 方法或索引访问它们。

下面是一些示例代码,演示了如何在 Python 的正则表达式中使用捕获组和非捕获组:

import re

# 使用捕获组匹配字符串,并提取其中的子串
pattern = r'(\w+)\.com'
text = 'pidancode.com is a great website'
match = re.search(pattern, text)
print(match.group(1))  # 输出 'pidancode'

# 使用非捕获组匹配字符串
pattern = r'(?:皮蛋)?编程'
text1 = '皮蛋编程是一个网站'
text2 = '编程是一种艺术'
print(re.search(pattern, text1))  # 匹配成功,输出 <re.Match object...>
print(re.search(pattern, text2))  # 匹配失败,输出 None

在这个例子中,第一个示例使用捕获组来匹配输入字符串中的网址,并提取其中的子串。第二个示例使用非捕获组来匹配两个字符串中的“编程”子串,但只有在第一个字符串中包含“皮蛋”时才会匹配成功。

总之,捕获组和非捕获组都是正则表达式中的重要概念,可以帮助我们更精确地匹配需要的模式并提取其中的子串。

相关文章