目錄
常用元字符
示例
输出
字符类和量词
捕获组、锚点和前瞻
反向引用、标志和高级修饰符
常见的正则表达式陷阱和最佳实践
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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++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 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

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系統以獲得更好的開發體驗和安全保障。

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

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

vscode 擴展是否是惡意的 vscode 擴展是否是惡意的 Apr 15, 2025 pm 07:57 PM

VS Code 擴展存在惡意風險,例如隱藏惡意代碼、利用漏洞、偽裝成合法擴展。識別惡意擴展的方法包括:檢查發布者、閱讀評論、檢查代碼、謹慎安裝。安全措施還包括:安全意識、良好習慣、定期更新和殺毒軟件。

See all articles