目次
常用元字符
示例
输出
字符类和量词
捕获组、锚点和前瞻
反向引用、标志和高级修饰符
常见的正则表达式陷阱和最佳实践
Title
', '
结论

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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

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 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PSフェザーリングは、遷移の柔らかさをどのように制御しますか? PSフェザーリングは、遷移の柔らかさをどのように制御しますか? Apr 06, 2025 pm 07:33 PM

羽毛の鍵は、その漸進的な性質を理解することです。 PS自体は、勾配曲線を直接制御するオプションを提供しませんが、複数の羽毛、マッチングマスク、および細かい選択により、半径と勾配の柔らかさを柔軟に調整して、自然な遷移効果を実現できます。

インストール後にMySQLの使用方法 インストール後にMySQLの使用方法 Apr 08, 2025 am 11:48 AM

この記事では、MySQLデータベースの操作を紹介します。まず、MySQLWorkBenchやコマンドラインクライアントなど、MySQLクライアントをインストールする必要があります。 1. mysql-uroot-pコマンドを使用してサーバーに接続し、ルートアカウントパスワードでログインします。 2。CreatedAtaBaseを使用してデータベースを作成し、データベースを選択します。 3. createTableを使用してテーブルを作成し、フィールドとデータ型を定義します。 4. INSERTINTOを使用してデータを挿入し、データをクエリし、更新することでデータを更新し、削除してデータを削除します。これらの手順を習得することによってのみ、一般的な問題に対処することを学び、データベースのパフォーマンスを最適化することでMySQLを効率的に使用できます。

mysqlは支払う必要がありますか mysqlは支払う必要がありますか Apr 08, 2025 pm 05:36 PM

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

PSフェザーリングをセットアップする方法は? PSフェザーリングをセットアップする方法は? Apr 06, 2025 pm 07:36 PM

PSフェザーリングは、イメージエッジブラー効果であり、エッジエリアのピクセルの加重平均によって達成されます。羽の半径を設定すると、ぼやけの程度を制御でき、値が大きいほどぼやけます。半径の柔軟な調整は、画像とニーズに応じて効果を最適化できます。たとえば、キャラクターの写真を処理する際に詳細を維持するためにより小さな半径を使用し、より大きな半径を使用してアートを処理するときにかすんだ感覚を作成します。ただし、半径が大きすぎるとエッジの詳細を簡単に失う可能性があり、効果が小さすぎると明らかになりません。羽毛効果は画像解像度の影響を受け、画像の理解と効果の把握に従って調整する必要があります。

MySQLインストール後にデータベースのパフォーマンスを最適化する方法 MySQLインストール後にデータベースのパフォーマンスを最適化する方法 Apr 08, 2025 am 11:36 AM

MySQLパフォーマンスの最適化は、インストール構成、インデックス作成、クエリの最適化、監視、チューニングの3つの側面から開始する必要があります。 1。インストール後、INNODB_BUFFER_POOL_SIZEパラメーターやclose query_cache_sizeなど、サーバーの構成に従ってmy.cnfファイルを調整する必要があります。 2。過度のインデックスを回避するための適切なインデックスを作成し、説明コマンドを使用して実行計画を分析するなど、クエリステートメントを最適化します。 3. MySQL独自の監視ツール(ShowProcessList、ShowStatus)を使用して、データベースの健康を監視し、定期的にデータベースをバックアップして整理します。これらの手順を継続的に最適化することによってのみ、MySQLデータベースのパフォーマンスを改善できます。

高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? 高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? Apr 08, 2025 pm 06:03 PM

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

MySQLインストール後に開始できないサービスのソリューション MySQLインストール後に開始できないサービスのソリューション Apr 08, 2025 am 11:18 AM

MySQLは開始を拒否しましたか?パニックにならないでください、チェックしてみましょう!多くの友人は、MySQLのインストール後にサービスを開始できないことを発見し、彼らはとても不安でした!心配しないでください、この記事はあなたがそれを落ち着いて対処し、その背後にある首謀者を見つけるためにあなたを連れて行きます!それを読んだ後、あなたはこの問題を解決するだけでなく、MySQLサービスの理解と問題のトラブルシューティングのためのあなたのアイデアを改善し、より強力なデータベース管理者になることができます! MySQLサービスは開始に失敗し、単純な構成エラーから複雑なシステムの問題に至るまで、多くの理由があります。最も一般的な側面から始めましょう。基本知識:サービススタートアッププロセスMYSQLサービススタートアップの簡単な説明。簡単に言えば、オペレーティングシステムはMySQL関連のファイルをロードし、MySQLデーモンを起動します。これには構成が含まれます

MySQLはダウンロード後にインストールできません MySQLはダウンロード後にインストールできません Apr 08, 2025 am 11:24 AM

MySQLのインストール障害の主な理由は次のとおりです。1。許可の問題、管理者として実行するか、SUDOコマンドを使用する必要があります。 2。依存関係が欠落しており、関連する開発パッケージをインストールする必要があります。 3.ポート競合では、ポート3306を占めるプログラムを閉じるか、構成ファイルを変更する必要があります。 4.インストールパッケージが破損しているため、整合性をダウンロードして検証する必要があります。 5.環境変数は誤って構成されており、環境変数はオペレーティングシステムに従って正しく構成する必要があります。これらの問題を解決し、各ステップを慎重に確認して、MySQLを正常にインストールします。

See all articles