正则表达式,通常称为 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
在上面的示例中,该模式使用命名组(?P
结论
正则表达式是 Python 中模式匹配和文本操作的强大工具。通过了解基本语法、元字符和常见的正则表达式技术,您可以解锁处理文本数据的各种可能性。
위 내용은 Python 정규식 치트 시트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Arraysinpython, 특히 비밀 복구를위한 ArecrucialInscientificcomputing.1) theaRearedFornumericalOperations, DataAnalysis 및 MachinELearning.2) Numpy'SimplementationIncensuressuressurations thanpythonlists.3) arraysenablequick

Pyenv, Venv 및 Anaconda를 사용하여 다양한 Python 버전을 관리 할 수 있습니다. 1) PYENV를 사용하여 여러 Python 버전을 관리합니다. Pyenv를 설치하고 글로벌 및 로컬 버전을 설정하십시오. 2) VENV를 사용하여 프로젝트 종속성을 분리하기 위해 가상 환경을 만듭니다. 3) Anaconda를 사용하여 데이터 과학 프로젝트에서 Python 버전을 관리하십시오. 4) 시스템 수준의 작업을 위해 시스템 파이썬을 유지하십시오. 이러한 도구와 전략을 통해 다양한 버전의 Python을 효과적으로 관리하여 프로젝트의 원활한 실행을 보장 할 수 있습니다.

Numpyarrayshaveseveraladvantagesstandardpythonarrays : 1) thearemuchfasterduetoc 기반 간증, 2) thearemorememory-refficient, 특히 withlargedatasets 및 3) wepferoptizedformationsformationstaticaloperations, 만들기, 만들기

어레이의 균질성이 성능에 미치는 영향은 이중입니다. 1) 균질성은 컴파일러가 메모리 액세스를 최적화하고 성능을 향상시킬 수 있습니다. 2) 그러나 유형 다양성을 제한하여 비 효율성으로 이어질 수 있습니다. 요컨대, 올바른 데이터 구조를 선택하는 것이 중요합니다.

tocraftexecutablepythonscripts, 다음과 같은 비스트 프랙티스를 따르십시오 : 1) 1) addashebangline (#!/usr/bin/envpython3) tomakethescriptexecutable.2) setpermissionswithchmod xyour_script.py.3) organtionewithlarstringanduseifname == "__"

numpyarraysarebetterfornumericaloperations 및 multi-dimensionaldata, mumemer-efficientArrays

numpyarraysarebetterforheavynumericalcomputing, whilearraymoduleisiMoresuily-sportainedprojectswithsimpledatatypes.1) numpyarraysofferversatively 및 formanceforgedatasets 및 complexoperations.2) Thearraymoduleisweighit 및 ep

ctypesallowscreatingandmanipulatingC-stylearraysinPython.1)UsectypestointerfacewithClibrariesforperformance.2)CreateC-stylearraysfornumericalcomputations.3)PassarraystoCfunctionsforefficientoperations.However,becautiousofmemorymanagement,performanceo


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
