目录
常用元字符
示例
输出
字符类和量词
捕获组、锚点和前瞻
反向引用、标志和高级修饰符
常见的正则表达式陷阱和最佳实践
Title
', '
结论
首页 后端开发 Python教程 Python正则表达式速查表

Python正则表达式速查表

Aug 28, 2023 am 09:57 AM
python 正则表达式 速查表

Python正则表达式速查表

正则表达式,通常称为 regex,是 Python 编程中模式匹配和文本操作的强大工具。它们允许您根据特定模式搜索、提取和修改文本,这使得它们对于数据验证、字符串操作和文本处理等任务至关重要。

但是,使用正则表达式可能具有挑战性,特别是对于初学者或不经常使用它们的人来说。记住语法并理解各种元字符和规则可能会令人畏惧。

为了让您的正则表达式之旅更加顺利,我们创建了一份全面的 Python 正则表达式备忘单。此备忘单可作为方便的参考指南,为您提供 Python 正则表达式中最常用的元字符、字符类、量词、锚点、组、标志、转义序列和特殊字符的快速概述。

注意 请记住在 Python 脚本中导入 re 模块以使用正则表达式。

常用元字符

元字符是正则表达式中的特殊字符,具有特定含义并用于定义模式。理解和利用这些元字符对于有效的模式匹配至关重要。在本节中,我们将探讨 Python 正则表达式中一些最常用的元字符。

  • 点 (.) 点元字符匹配除换行符之外的任何字符。它通常用于表示通配符,允许您匹配给定位置的任何字符。

示例

import re

pattern = r"b.ttle"
text1 = "bottle"
text2 = "battle"
text3 = "bottle\n"

match1 = re.search(pattern, text1)
match2 = re.search(pattern, text2)
match3 = re.search(pattern, text3)

print(match1) 
print(match2)  
print(match3)  
登录后复制

输出

<re.Match object; span=(0, 6), match='bottle'>
<re.Match object; span=(0, 6), match='battle'>
<re.Match object; span=(0, 6), match='bottle'>
登录后复制

在上面的示例中,点元字符 。用于匹配模式 b.ttle 中的任何字符。它成功匹配“bottle”和“battle”,但无法匹配“bottle\n”,因为点与换行符不匹配。

  • 脱字符号 (^) 和美元符号 ($) 插入符号和美元符号元字符分别代表行的开头和结尾。它们用于将模式锚定在行的开头或结尾。

示例

import re

pattern1 = r"^Python"
pattern2 = r"\d$"
text1 = "Python is a powerful language"
text2 = "The price is $10"

match1 = re.search(pattern1, text1)
match2 = re.search(pattern2, text2)

print(match1)
print(match2)
登录后复制

输出

<re.Match object; span=(0, 6), match='Python'>
<re.Match object; span=(15, 16), match='0'>
登录后复制

在上面的示例中,脱字符号 ^ 用于将模式“Python”锚定在行的开头,从而在 text1 中成功匹配它。美元符号 $ 用于将模式 \d(匹配任何数字)锚定在行尾,成功匹配 text2 中的数字“0”。

  • 方括号([...]) 方括号用于创建字符类,允许您匹配一组指定字符中的单个字符。您可以在括号内包含多个字符或范围。

示例

import re

pattern = r"[aeiou]"
text = "Hello, World!"

matches = re.findall(pattern, text)

print(matches)
登录后复制

输出

['e', 'o', 'o']
登录后复制
登录后复制

在上面的示例中,模式 [aeiou] 用于匹配文本中的任何元音字符。 findall() 函数返回找到的所有匹配项的列表,在本例中是字符“e”、“o”和“o”。

  • 管道 (|) − 管道字符用作 OR 运算符,允许您匹配左侧的模式或右侧的模式。

示例

import re

pattern = r"cat|dog"
text = "I have a cat and a dog"

match = re.search(pattern, text)

print(match)
登录后复制

输出

<re.Match object; span=(9, 12), match='cat'>
登录后复制

在上面的示例中,模式 cat|dog 匹配“cat”或“dog”。 search() 函数返回找到的第一个匹配项,在本例中为“cat”。

这些只是 Python 正则表达式中常用元字符的几个示例。在下一节中,我们将探索字符类和量词,以进一步增强我们的模式匹配能力。

字符类和量词

在定义正则表达式模式时,字符类和量词提供了额外的灵活性和控制。在本节中,我们将深入研究这些功能并学习如何有效地使用它们。

  • 字符类  字符类允许您指定一组可以在模式中的特定位置匹配的字符。它们括在方括号 [ ] 内,并提供一种匹配定义集中的任何单个字符的方法。

示例

import re

pattern = r"[aeiou]"
text = "Hello, World!"

matches = re.findall(pattern, text)

print(matches) 
登录后复制

输出

['e', 'o', 'o']
登录后复制
登录后复制

在上面的示例中,字符类 [aeiou] 匹配文本中的任何元音字符。 findall() 函数返回找到的所有匹配项的列表,在本例中是字符“e”、“o”和“o”。

  • 否定字符类 − 否定字符类允许您匹配不在定义集中的任何字符。它们通过在字符类开头包含插入符号 ^ 来表示。

示例

import re

pattern = r"[^aeiou]"
text = "Hello, World!"

matches = re.findall(pattern, text)

print(matches)
登录后复制

输出

['H', 'l', 'l', ',', ' ', 'W', 'r', 'l', 'd', '!']
登录后复制

在上面的示例中,否定字符类 [^aeiou] 匹配任何不是元音的字符。 findall() 函数返回找到的所有匹配项的列表,其中包括所有辅音字符和标点符号。

  • 量词− Q量词允许您指定应匹配的模式出现的次数。它们可以应用于单个字符、字符类或模式组

    •  匹配零次或多次出现的前述模式。

    • + − 匹配前面模式的一次或多次出现。

    • - 匹配前面的模式出现零次或一次。

    • {n} - 精确匹配前面模式的 n 次出现。

    • {n,} - 匹配前面模式的至少 n 次出现。

    • {n,m} - 前面模式的 n 次和 m 次出现之间的匹配。

示例

import re

pattern = r"ab*c"
text1 = "ac"
text2 = "abc"
text3 = "abbbbc"

match1 = re.search(pattern, text1)
match2 = re.search(pattern, text2)
match3 = re.search(pattern, text3)

print(match1)  
print(match2)  
print(match3)  
登录后复制

输出

<re.Match object; span=(0, 2), match='ac'>
<re.Match object; span=(0, 3), match='abc'>
<re.Match object; span=(0, 6), match='abbbbc'>
登录后复制

在上面的示例中,量词 * 用于匹配模式 ab*c 中零次或多次出现的字符“b”。它成功匹配“ac”、“abc”和“abbbbc”,因为“b”字符是可选的。

通过组合字符类、否定字符类和量词,您可以创建强大且灵活的正则表达式模式来匹配给定文本中的各种模式。

在下一节中,我们将探索 Python 正则表达式的更多高级功能,包括捕获组、锚点和前瞻。

捕获组、锚点和前瞻

捕获组、锚点和前瞻是 Python 正则表达式的高级功能,可以更好地控制模式匹配。在本节中,我们将探讨这些功能并了解如何有效地使用它们。

  • 捕获组  捕获组允许您在更大的模式中定义子模式并提取匹配的内容。它们是使用括号 ( ) 定义的,当您想要提取匹配的特定部分时非常有用。

示例

import re

pattern = r"(\d{2})-(\d{2})-(\d{4})"
text = "Date of Birth: 01-23-1990"

match = re.search(pattern, text)

if match:
    day = match.group(1)
    month = match.group(2)
    year = match.group(3)
    print(f"Day: {day}, Month: {month}, Year: {year}")
登录后复制

输出

Day: 01, Month: 23, Year: 1990
登录后复制

在上面的示例中,模式 (\d{2})-(\d{2})-(\d{4}) 定义了三个捕获组以匹配日期格式的日、月和年。 search()函数返回一个匹配对象,group()方法用于提取匹配的值。输出将为“日:01,月:23,年:1990”。

  • 锚点 锚点用于指定文本中匹配项应出现的位置。它们不匹配任何字符,而是断言周围文本的条件。两个常用的锚点是 ^ 和 $。

    • ^ − 匹配字符串的开头。

    • $ - 匹配字符串的结尾。

示例

import re

pattern = r"^Python"
text = "Python is a popular programming language"

match = re.search(pattern, text)

if match:
    print("Match found!")
else:
    print("No match found.")
登录后复制

输出

Match found!
登录后复制
登录后复制
登录后复制

在上面的示例中,模式 ^Python 仅当单词“Python”出现在文本开头时才匹配它。由于文本以“Python”开头,因此找到匹配项,并打印相应的消息。

  • 前视 前瞻用于指定必须遵循模式才能发生匹配的条件。它们用 (?=...) 表示正向先行,用 (?!...) 表示负向先行。

示例

import re

pattern = r"\b\w+(?=ing\b)"
text = "Walking is good for health"

matches = re.findall(pattern, text)

print(matches)
登录后复制

输出

['Walk']
登录后复制

在上面的示例中,模式 \b\w+(?=ing\b) 与后缀“ing”后的任何单词匹配。正向前瞻 (?=ing\b) 断言该单词后面应该跟有“ing”,但它不是实际匹配的一部分。 findall() 函数返回所有匹配单词的列表,在本例中为“Walk”。

通过利用捕获组、锚点和前瞻,您可以创建更复杂的正则表达式模式来精确匹配和提取文本中的特定内容。

在下一节中,我们将探索 Python 正则表达式的其他高级功能,包括反向引用、标志和高级修饰符。

反向引用、标志和高级修饰符

反向引用、标志和高级修饰符是 Python 正则表达式的强大功能,可增强模式匹配功能。在本节中,我们将深入研究这些功能并学习如何有效地利用它们。

  • 反向引用− 反向引用允许您引用模式中先前捕获的组。它们使用反斜杠 \ 后跟组编号或名称来表示。当您想要匹配重复模式或确保匹配内容的一致性时,反向引用非常有用。

示例

import re

pattern = r"(\w+)\s+\1"
text = "hello hello"

match = re.search(pattern, text)

if match:
    print("Match found!")
else:
    print("No match found.")
登录后复制

输出

Match found!
登录后复制
登录后复制
登录后复制

在上面的示例中,模式 (\w+)\s+\1 匹配一个单词,后跟一个或多个空格,然后再次匹配相同的单词。反向引用 \1 指的是第一个捕获的组,这确保了相同的单词被重复。由于文本包含“hello hello”,因此找到匹配项,并打印相应的消息。

  • 标志 标志修改正则表达式模式匹配的行为。它们使用 re 模块常量表示,并且可以作为可选参数传递给正则表达式函数。一些常用的标志是: -

    • re.IGNORECASE - 匹配时忽略大小写。

    • re.MULTILINE - 启用多行匹配。

    • re.DOTALL - 允许点 (.) 匹配任何字符,包括换行符。

示例

import re

pattern = r"python"
text = "Python is a popular programming language"

match = re.search(pattern, text, re.IGNORECASE)

if match:
    print("Match found!")
else:
    print("No match found.")
登录后复制

输出

Match found!
登录后复制
登录后复制
登录后复制

在上面的示例中,模式 python 与带有 re.IGNORECASE 标志的文本进行匹配。结果,大小写差异被忽略,尽管单词“Python”以大写字母开头,但仍找到匹配项。

  • 高级修饰符  高级修饰符提供对正则表达式匹配行为的额外控制。它们使用放置在正则表达式模式的结束定界符之后的特殊字符来表示。

    • ? - 使前面的模式可选(匹配 0 或 1 次出现)。

    •  匹配前面模式的 0 次或多次出现。

    • + - 匹配前面模式的 1 次或多次出现。

    • {m} - 精确匹配前面模式的 m 次出现。

    • {m, n} - 前面模式的 m 次和 n 次出现之间的匹配。

示例

import re

pattern = r"apples?|bananas?"
text = "I like apple and bananas"

matches = re.findall(pattern, text)

print(matches)
登录后复制

输出

['apple', 'bananas']
登录后复制

在上面的示例中,模式 apples?|bananas?匹配“apple”或“apples”和“banana”或“bananas”。这 ?修饰符使前面的字符或组可选,允许匹配水果名称的单数和复数形式。

通过使用反向引用、标志和高级修饰符,您可以创建更灵活、动态的正则表达式模式来处理各种匹配场景。

在下一节中,我们将讨论常见的正则表达式陷阱以及提高您的正则表达式技能的最佳实践。

常见的正则表达式陷阱和最佳实践

虽然正则表达式是模式匹配的强大工具,但如果使用不当,它们也可能容易陷入陷阱。在本部分中,我们将探讨一些常见的陷阱并提供最佳实践来帮助您避免它们。

  • 贪婪匹配与非贪婪匹配 一个常见的陷阱是正则表达式的贪婪匹配行为,其中模式尽可能匹配。这可能会导致意想不到的结果,尤其是在使用 * 和 + 等量词时。为了缓解这种情况,您可以使用非贪婪修饰符 *?和+?尽可能少地匹配。

示例

import re

text = "<html><body><h1 id="Title">Title</h1></body></html>"

pattern = r"<.*?>"
matches = re.findall(pattern, text)

print(matches)
登录后复制

输出

['<html>', '<body>', '<h1 id="">', '</h1>', '</body>', '</html>']
登录后复制

在上面的示例中,模式 <.*?> 与 HTML 标记匹配。这 。*?非贪婪修饰符确保匹配在第一次出现 > 时停止。如果没有非贪婪修饰符,匹配将跨越整个文本,包括多个标签。

  • 锚定匹配  锚定匹配可以防止在文本中意外位置出现意外匹配。锚点是标记行或整个文本的开头 (^) 和结尾 ($) 的特殊字符。

示例

import re

text = "The quick brown fox jumps over the lazy dog."

pattern = r"\bfox\b"
matches = re.findall(pattern, text)

print(matches)  # Output: ['fox']
登录后复制

输出

['fox']
登录后复制

在上面的示例中,模式 \bfox\b 与单词“fox”作为整个单词匹配。 \b 锚点确保“fox”不会作为另一个单词的一部分进行匹配,例如“foxy”或“foxes”。

  • 复杂的嵌套模式在处理涉及嵌套组的复杂模式时,为了提高可读性和可维护性,使用命名组和正确的模式组织非常重要。

示例

import re

text = "Date: 2022-01-01, Time: 12:00 PM"

pattern = r"Date: (?P<date>\d{4}-\d{2}-\d{2}), Time: (?P<time>\d{2}:\d{2} [AP]M)"
match = re.search(pattern, text)

if match:
    date = match.group("date")
    time = match.group("time")
    print(f"Date: {date}, Time: {time}")
登录后复制

输出

Date: 2022-01-01, Time: 12:00 PM
登录后复制

在上面的示例中,该模式使用命名组(?Ppattern)来捕获日期和时间信息。这种方法提高了代码的可读性,并允许使用组名称轻松访问捕获的值。

结论

正则表达式是 Python 中模式匹配和文本操作的强大工具。通过了解基本语法、元字符和常见的正则表达式技术,您可以解锁处理文本数据的各种可能性。

以上是Python正则表达式速查表的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

Python vs. JavaScript:社区,图书馆和资源 Python vs. JavaScript:社区,图书馆和资源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

vscode怎么在终端运行程序 vscode怎么在终端运行程序 Apr 15, 2025 pm 06:42 PM

在 VS Code 中,可以通过以下步骤在终端运行程序:准备代码和打开集成终端确保代码目录与终端工作目录一致根据编程语言选择运行命令(如 Python 的 python your_file_name.py)检查是否成功运行并解决错误利用调试器提升调试效率

visual studio code 可以用于 python 吗 visual studio code 可以用于 python 吗 Apr 15, 2025 pm 08:18 PM

VS Code 可用于编写 Python,并提供许多功能,使其成为开发 Python 应用程序的理想工具。它允许用户:安装 Python 扩展,以获得代码补全、语法高亮和调试等功能。使用调试器逐步跟踪代码,查找和修复错误。集成 Git,进行版本控制。使用代码格式化工具,保持代码一致性。使用 Linting 工具,提前发现潜在问题。

vscode 扩展是否是恶意的 vscode 扩展是否是恶意的 Apr 15, 2025 pm 07:57 PM

VS Code 扩展存在恶意风险,例如隐藏恶意代码、利用漏洞、伪装成合法扩展。识别恶意扩展的方法包括:检查发布者、阅读评论、检查代码、谨慎安装。安全措施还包括:安全意识、良好习惯、定期更新和杀毒软件。

vs code 可以在 Windows 8 中运行吗 vs code 可以在 Windows 8 中运行吗 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上运行,但体验可能不佳。首先确保系统已更新到最新补丁,然后下载与系统架构匹配的VS Code安装包,按照提示安装。安装后,注意某些扩展程序可能与Windows 8不兼容,需要寻找替代扩展或在虚拟机中使用更新的Windows系统。安装必要的扩展,检查是否正常工作。尽管VS Code在Windows 8上可行,但建议升级到更新的Windows系统以获得更好的开发体验和安全保障。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

vscode是什么 vscode是干什么用的 vscode是什么 vscode是干什么用的 Apr 15, 2025 pm 06:45 PM

VS Code 全称 Visual Studio Code,是一个由微软开发的免费开源跨平台代码编辑器和开发环境。它支持广泛的编程语言,提供语法高亮、代码自动补全、代码片段和智能提示等功能以提高开发效率。通过丰富的扩展生态系统,用户可以针对特定需求和语言添加扩展程序,例如调试器、代码格式化工具和 Git 集成。VS Code 还包含直观的调试器,有助于快速查找和解决代码中的 bug。

See all articles