Python正则表达式常用语法全解析
在编程的日常任务中,处理文本数据是一项常见而重要的技能,无论是从日志文件中提取关键信息,还是验证用户输入的格式是否正确,高效地操作字符串都是必不可少的,Python作为一门功能强大的编程语言,提供了多种处理字符串的方法,正则表达式(Regular Expressions, regex)是一种极为高效且灵活的工具,本文将深入探讨Python中正则表达式的常用语法,帮助您掌握这一强大的文本处理技术。
正则表达式基础概念
正则表达式是一种描述字符串规则的语言,它用于匹配、查找、替换或分割文本中的特定模式,在Python中,re模块是处理正则表达式的标准库,提供了丰富的函数和方法来执行各种正则表达式操作。

常用正则表达式语法
字符匹配
- 普通字符:大多数字符,如字母、数字,可以直接匹配它们自身,正则表达式
ai会匹配字符串“artificial intelligence”中的“ai”。 - 特殊字符:一些字符具有特殊含义,如匹配除换行符以外的任何单个字符,
\d匹配任何数字,相当于[0-9];\w匹配任何字母数字字符或下划线,等同于[a-zA-Z0-9_];\s匹配任何空白字符,包括空格、制表符、换页符等。
重复限定符
- 匹配前面的子表达式零次或多次。
zo*能匹配“z”以及“zoo”。 - 匹配前面的子表达式一次或多次。
a+能匹配“a”、“aa”等。 - 匹配前面的子表达式零次或一次。
do(es)?可以匹配“do”或“does”。 {n}:确定数量的匹配,{n}表示匹配前面的子表达式n次。{n,}:至少n次匹配,{n,}表示前面的子表达式至少出现n次。{n,m}:范围匹配,{n,m}表示前面的子表达式至少出现n次,至多m次。
位置限定符
^:匹配字符串的开始位置。^A会匹配以“A”开头的字符串。- 匹配字符串的结束位置,如
a$会匹配以“a”结尾的字符串。 \b:匹配单词边界,即位于\w和\W之间的位置。er\b可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。\B:非单词边界匹配,与\b相反。
逻辑分组与选择
- 表示“或”的关系,用于匹配多个正则表达式中的任意一个。
(git|svn)可以匹配“git”或“svn”。 - 分组,将几个字符视为一个整体,并可以保存匹配的子串供后续使用。
(\d{4})-(\d{2})-(\d{2})可以匹配日期格式,并分别捕获年、月、日。
贪婪与非贪婪匹配
- 默认情况下,重复匹配是贪婪的,即尽可能多地匹配字符。
<.*>在匹配"<html>title</html>"时,会匹配整个字符串。 - 使用可以使匹配变为非贪婪模式,即尽可能少地匹配字符,如
<.*?>在上述例子中将只匹配"<html>"(然后是后续的独立标签,取决于如何继续匹配)。
转义特殊字符
- 当需要匹配正则表达式中的特殊字符(如、等)时,需要在这些字符前加上反斜杠
\进行转义。a\.b会匹配“a.b”,而不是“a”后跟任意字符再跟“b”。
反向引用
- 反向引用允许在正则表达式中引用之前通过分组捕获的子串,在Python中,这通过
\number实现,其中number是分组的编号。(.)\\1可以匹配两个连续的相同字符,如“aa”、“bb”等。
注释与模式修饰符
- 虽然Python的
re模块不直接支持在正则表达式中添加注释,但可以通过使用re.VERBOSE标志在模式字符串中使用空格和注释来提高可读性。 - 模式修饰符,如
re.IGNORECASE(忽略大小写)、re.MULTILINE(多行模式)等,可以改变正则表达式的匹配行为。
实战示例
假设我们需要从一个字符串中提取所有的电子邮件地址,可以使用以下正则表达式:
import re
text = "Contact us at support@example.com or sales@example.co.uk for more information."
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
emails = re.findall(pattern, text)
print(emails)
这段代码中,正则表达式pattern定义了电子邮件地址的基本结构,包括用户名部分、符号、域名部分以及顶级域名。re.findall函数返回所有匹配的电子邮件地址列表。
正则表达式是Python中处理文本数据的一把利器,它以其简洁而强大的语法,为开发者提供了高效解决文本匹配、提取、替换等问题的能力,通过掌握上述常用语法,您可以开始在项目中使用正则表达式,处理各种复杂的文本处理任务,正则表达式的深度和广度远不止于此,随着实践的深入,您将发现更多高级用法和技巧,进一步提升文本处理的效率和准确性,不断探索和实践,是掌握正则表达式的关键。
未经允许不得转载! 作者:python1991知识网,转载或复制请以超链接形式并注明出处Python1991知识网。
原文地址:https://www.python1991.cn/5292.html发布于:2026-04-10





