Python 正则表达式基础

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

欢迎来到霍格沃茨魔法学校,这里汇聚了魔法世界中最聪慧的头脑,一同深入探索魔法的奥秘。在这些走廊和隐秘的房间之中,存在着一项即便最技艺高超的巫师也会感到困惑的挑战:掌握 Python 正则表达式这一神秘艺术。

在这个充满魔法的环境里,我们结识了主人公,一位以制作最为精致且强大魔杖而闻名的天才魔杖工匠。这些魔杖不仅仅是工具,它们还承载着古老魔法世界的知识与秘密。为了满足定制化和复杂性的高要求,魔杖工匠求助于 Python 正则表达式,以简化符文雕刻和魔法咒语的编写。

目标很明确:学习并运用 Python 正则表达式的强大魔法,帮助我们的魔杖工匠更高效地组织和处理魔法文本与公式。你能迎接这个挑战,成为一名正则表达式巫师吗?


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") subgraph Lab Skills python/regular_expressions -.-> lab-271586{{"Python 正则表达式基础"}} end

理解基本模式

在这一步中,你将了解 Python 正则表达式中使用的基本模式。借助正确的模式,你可以像施展精确的咒语一样匹配、搜索和过滤文本。你将练习创建一个基本的正则表达式,以识别魔杖设计中的简单符文序列。

让我们先在 ~/project 目录中打开一个名为 rune_sequences.py 的文件,并编写一个正则表达式来查找给定文本中的所有元音组合。

import re

## 包含虚构符文序列的示例文本
text = "aeiou aci aeiooo cuii exiovi"

## 用于匹配所有元音组合的正则表达式模式
pattern = r"[aeiou]+"

## 使用 'findall' 方法查找所有匹配项
matches = re.findall(pattern, text)

print("找到的元音组合:", matches)

在终端中运行上述代码并观察输出。

python rune_sequences.py

预期输出应列出所有元音组合,如下所示:

找到的元音组合: ['aeiou', 'a', 'i', 'aeiooo', 'uii', 'e', 'io', 'i']

提取魔杖核心元素

既然你已经掌握了基本的模式匹配,那就让我们进入更高级的内容。魔杖工匠需要从一个列表中提取核心材料。每个魔杖核心都是一个复合词,通常以前缀一个魔法生物和后缀一个魔法物质组成。

~/project 目录中打开一个名为 wand_cores.py 的文件,并编写一个正则表达式模式,以从提供的文本中匹配并列出魔杖核心。

import re

## 包含混合信息的文本,包括魔杖核心
text = "dragonheartstring phoenixfeather unicornhair basiliskvenom trollwhisker"

## 用于匹配魔杖核心(复合词)的正则表达式模式
pattern = r"\b\w+heartstring|\b\w+feather|\b\w+hair|\b\w+venom|\b\w+whisker"

## 使用 'findall' 方法查找所有匹配项
wand_cores = re.findall(pattern, text)

print("提取的魔杖核心:", wand_cores)

运行上述代码并检查魔杖核心列表。

python wand_cores.py

预期输出应显示文本中找到的魔杖核心:

提取的魔杖核心: ['dragonheartstring', 'phoenixfeather', 'unicornhair', 'basiliskvenom', 'trollwhisker']

验证魔法咒语

作为最后的挑战,我们将验证用于给魔杖施加魔法的咒语。咒语必须遵循严格的模式:它们必须以一个魔法词开头,接着是一个冒号,然后是一系列用逗号分隔的魔法参数或咒语。一个有效的魔法咒语看起来像 'Lumos:maxima,solemnly,nova'。

~/project 目录中打开 enchantment_validator.py,并编写一个函数,使用正则表达式来验证一系列魔法咒语。

import re

def validate_enchantment(phrase):
    ## 用于匹配有效魔法咒语的正则表达式模式
    pattern = r"^[A-Za-z]+:(?:[A-Za-z]+,)*[A-Za-z]+$"
    if re.fullmatch(pattern, phrase):
        return True
    else:
        return False

## 要验证的咒语列表
phrases = [
    "Lumos:maxima,solemnly,nova",
    "Reducio:shrink,less",
    "Protego:maxima",
    "Alohomora:",
    "Expelliarmus:disarm,fight,duel,"
]

## 验证每个咒语
for phrase in phrases:
    result = validate_enchantment(phrase)
    print(f"'{phrase}' 是 {'有效' if result else '无效'}")

运行代码并检查验证结果。

python enchantment_validator.py

预期输出应显示哪些咒语是有效的:

'Lumos:maxima,solemnly,nova' 是有效
'Reducio:shrink,less' 是有效
'Protego:maxima' 是有效
'Alohomora:' 是无效
'Expelliarmus:disarm,fight,duel,' 是无效

总结

在这个实验中,你踏上了一段穿越霍格沃茨魔法学校的神奇旅程,以掌握 Python 正则表达式的魔法。从解读符文序列中的基本模式,到提取魔杖核心以及验证魔法咒语,你已经磨练了自己的技能,以帮助魔杖工匠。

希望通过这种实践方法,你对正则表达式在文本处理中的强大功能和多功能性有了更深入的理解和欣赏。你的旅程不仅丰富了你的编码技能,还让你在正则表达式的世界中感受到了 Python 的魔力。