0Pricing
Python Academy · 课时

分组与命名捕获

使用捕获组和命名分组语法提取数据。

分组与命名捕获 是 CoddyKit 上的免费 Python Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

简介

捕获组可以提取匹配项中的特定部分。命名组可以让提取的数据具有自描述性。

基本捕获组

括号 () 会创建捕获组。m.group(1) 返回第一个组的匹配结果。
import re
m = re.search(r'(\d{4})-(\d{2})-(\d{2})', '2024-01-15')
if m: print(m.group(1), m.group(2), m.group(3))

m.groups()

m.groups() 会以元组形式返回所有捕获组。
import re
m = re.search(r'(\w+)@(\w+)\.(\w+)', 'user@example.com')
if m: print(m.groups())

命名组

(?Ppattern) 会创建命名组。请使用 m.group('name') 或 m.groupdict() 访问它。
import re
m = re.search(
    r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',
    '2024-01-15'
)
if m: print(m.groupdict())

非捕获组

(?:pattern) 会进行分组但不捕获。需要使用量词进行分组、但不需要匹配结果时,这种方式很有用。
import re
print(re.findall(r'(?:cat|dog)s?', 'cats dogs cat dog'))

反向引用

模式中的 \1 表示组 1 匹配的内容。它适用于查找重复的单词。
import re
# Match repeated words
m = re.search(r'\b(\w+)\s+\1\b', 'the the quick brown', re.IGNORECASE)
if m: print('repeated:', m.group())

带组的 findall

当模式包含组时,findall 会返回组元组组成的列表,而不是完整的匹配项。
import re
result = re.findall(r'(\w+)=(\w+)', 'x=1 y=2 z=3')
print(result)

在 re.sub() 中使用组

在 re.sub() 中,\1 或 \g 会将捕获组插入替换字符串。
import re
result = re.sub(r'(\w+)\s(\w+)', r'\2 \1', 'John Smith')
print(result)

正向前瞻 (?= )

(?=expr) 是正向前瞻——它会匹配 expr 后面的位置,但不会消耗字符。
import re
# Prices followed by USD
print(re.findall(r'\d+(?= USD)', '100 USD 200 EUR 300 USD'))

正向后瞻 (?<= )

(?<=expr) 是正向后瞻——它会匹配前面有 expr 的位置,但不会消耗字符。
import re
print(re.findall(r'(?<=\$)\d+', 'paid $100 and $200'))

命名反向引用

模式中的 (?P=name) 会引用命名组的值。它适用于匹配闭合标签。
import re
m = re.search(r'<(?P<tag>\w+)>.*?</(?P=tag)>', '<b>hello</b>')
if m: print(m.group())

快速检查

如何从匹配对象 m 中访问名为 'year' 的命名捕获组?

总结

组 () 用于捕获部分内容。m.group(1)、m.groups()、m.groupdict()。命名组:(?P)。非捕获组:(?:)。反向引用:替换中使用 \1 或 \g。

继续学习

做得很好!下一课正在等待您。

常见问题解答

「分组与命名捕获」课时是免费的吗?

是的 — 「分组与命名捕获」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「分组与命名捕获」这节课中我会学到什么?

使用捕获组和命名分组语法提取数据。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「分组与命名捕获」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 正则表达式基础
  2. 使用 re.match、re.search、re.findall
  3. 分组与命名捕获
  4. re.sub、标志与编译模式
← 返回 Python Academy