搜尋
首頁後端開發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中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除
Python vs. C:了解關鍵差異Python vs. C:了解關鍵差異Apr 21, 2025 am 12:18 AM

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

Python vs.C:您的項目選擇哪種語言?Python vs.C:您的項目選擇哪種語言?Apr 21, 2025 am 12:17 AM

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

達到python目標:每天2小時的力量達到python目標:每天2小時的力量Apr 20, 2025 am 12:21 AM

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

最大化2小時:有效的Python學習策略最大化2小時:有效的Python學習策略Apr 20, 2025 am 12:20 AM

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

在Python和C之間進行選擇:適合您的語言在Python和C之間進行選擇:適合您的語言Apr 20, 2025 am 12:20 AM

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python與C:編程語言的比較分析Python與C:編程語言的比較分析Apr 20, 2025 am 12:14 AM

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天2小時:Python學習的潛力每天2小時:Python學習的潛力Apr 20, 2025 am 12:14 AM

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

Python與C:學習曲線和易用性Python與C:學習曲線和易用性Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

See all articles

熱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

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

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),