正则表达式核心语法以及Python的re库中常用方法总结

 更新时间:2026年04月08日 09:33:28   作者:Because of interest  
正则表达式是文本处理的瑞士军刀,而Python的re模块则是操作这把利器的重要工具包,这篇文章主要介绍了正则表达式核心语法以及Python的re库中常用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

正则表达式(Regular Expression,re):一种用于匹配、查找或替换文本中特定模式的强大工具。

一、re的核心语法

1、基本匹配

语法说明示例(表达式 → 匹配示例)
abc匹配字面值 "abc""abc" → "abc"
.匹配任意单个字符(除换行符 \n"a.c" → "abc""a c"
\转义特殊字符(如 \. 匹配点号)"a\.c" → "a.c"
|或逻辑(匹配左边或右边的表达式)"cat|dog" → "cat" 或 "dog"

2、字符类

语法说明示例(表达式 → 匹配示例)
[abc]匹配 ab 或 c"[aeiou]" → "e" in "hello"
[^abc]匹配非 abc 的字符"[^0-9]" → "a" in "a1"
[a-z]匹配小写字母(范围)"[a-z]" → "h" in "Hi"
[A-Z0-9]匹配大写字母或数字"[A-Z0-9]" → "H""1"

3、量词(重复匹配)

语法说明示例(表达式 → 匹配示例)
*匹配前一项 0次或多次"a*" → """aaa"
+匹配前一项 1次或多次"a+" → "a""aaa"
?匹配前一项 0次或1次"a?" → """a"
{n}匹配前一项 恰好n次"a{2}" → "aa"
{n,}匹配前一项 至少n次"a{2,}" → "aaa"
{n,m}匹配前一项 n到m次"a{2,3}" → "aa""aaa"

4、贪婪 vs 非贪婪

语法说明示例(表达式 → 匹配示例)
*贪婪匹配(尽可能多)"a.*b" → "aabb" in "aabbaab"
*?非贪婪匹配(尽可能少)"a.*?b" → "aab" in "aabbaab"
+?非贪婪的 +"a.+?b" → "aab"

5、预定义字符类

语法说明等价写法 → 匹配示例
\d数字([0-9]"a\d" → "a1"
\D非数字([^0-9]"a\D" → "ab"
\w单词字符([a-zA-Z0-9_]"\w+" → "word_"
\W非单词字符"\W" → "!"
\s空白字符(空格、制表符等)"a\sb" → "a b"
\S非空白字符"a\Sb" → "a1b"

6、边界匹配

语法说明示例(表达式 → 匹配示例)
^匹配字符串开头"^a" → "a" in "abc"
$匹配字符串结尾"c$" → "c" in "abc"

二、Python的 re 库中常用的基本方法

1、核心匹配方法

方法语法返回值功能说明示例
re.match()re.match(pattern, string)Match 对象或 None从字符串开头匹配re.match(r'\d+', '123abc').group() → '123'
re.search()re.search(pattern, string)Match 对象或 None扫描整个字符串匹配第一个re.search(r'\d+', 'abc123').group() → '123'
re.findall()re.findall(pattern, string)列表返回所有匹配的子串re.findall(r'\d+', 'a1b22c333') → ['1', '22', '333']

 代码示例:

# match()方法错误示范
text = "邮箱:user.LiLi-103@example.com"
email_pattern = r'^[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
res = re.match(email_pattern, text)
if res:
    print(res.group())   
# 没有输出,因为文本开头是邮箱,而match()方法只从字符串开头匹配正则表达式,res为None
# match()方法正确使用:修改text,或使用search()方法
text = "user.LiLi-103@example.com"
email_pattern = r'^[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
res = re.match(email_pattern, text)
if res:
    print(res.group())  
# 输出为:user.LiLi-103@example.com
# search()
text = "abc123def456"
result = re.search(r'\d+', text)  # 查找第一个数字序列
if result:
    print("找到数字:", result.group())  # 输出: 123
else:
    print("未找到数字")
# findall()
text = "a156b22c333d"
results = re.findall(r'\d+', text)  # 查找所有数字序列
print("所有数字:", results)  # 输出: ['156', '22', '333']

注:.group()方法用于提取匹配的内容。如re.match()方法返回结果的是Match 对象,而不是匹配的内容,需要使用group()提取匹配内容。

2. 替换与分割

方法语法返回值功能说明示例
re.sub()re.sub(pattern, repl, string, count=0)字符串替换匹配的子串。

count:最大替换次数(默认 0 表示全部替换)

re.sub(r'\d+', 'X', 'a1b22') → 'aXbX'
re.split()re.split(pattern, string, maxsplit=0)列表按正则表达式分割字符串re.split(r'\d+', 'a1b22c3') → ['a', 'b', 'c', '']

代码示例:

import re
# 替换所有匹配项
text = "Python is great. Python is easy."
result = re.sub(r'Python', 'Java', text)  
print(result)  
# 输出: "Java is great. Java is easy."
# 只替换第一个
result = re.sub(r'Python', 'Java', text, count=1)  
print(result)  
# 输出: "Java is great. Python is easy."
text = "apple?banana,cherry.egg right"
result = re.split(r'[,.? ]', text)  # 按[,.? ]分割
print(result)  
# 输出: ['apple', 'banana', 'cherry', 'egg']
result = re.split(r'[,.? ]', text, maxsplit=1)  # 只分割一次
print(result)  
# 输出: ['apple', 'banana,cherry.egg right']

三、不同场景的变体

  • 宽松模式(匹配更多,包括新顶级域):

    re.findall(r'[\w\.\-]+@[\w\-]+(?:\.[\w\-]+)+', text)
  • 严格模式(仅匹配常用域名后缀,如 com, org, net, edu, cn 等):

    re.findall(r'[\w\.\-]+@[\w\-]+\.(?:com|org|net|edu|cn|co\.uk)', text, re.I)
  • 从 HTML/网页中提取(避免匹配标签内的假邮箱):
    可先使用 BeautifulSoup 解析文本内容,再应用上述正则。

  • 实时输入验证(判断一个字符串是否是合法邮箱):

    def is_valid_email(email: str) -> bool:
        return bool(EMAIL_REGEX.fullmatch(email.strip()))

总结

到此这篇关于正则表达式核心语法以及Python的re库中常用方法总结的文章就介绍到这了,更多相关Python正则表达式re库方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyTorch中torch.load()的用法和应用

    PyTorch中torch.load()的用法和应用

    torch.load()它用于加载由torch.save()保存的模型或张量,本文主要介绍了PyTorch中torch.load()的用法和应用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 通俗易懂详解Python基础五种下划线作用

    通俗易懂详解Python基础五种下划线作用

    本来而言,这个问题网上很多资料,但是网上资料都是复制来复制去,很多话大家其实都不是很明白的,或者拿着官方文档翻译过来的,让人看的非常迷糊。今天用通俗好懂表述解释下这几种情况
    2021-10-10
  • Python使用Selenium批量自动化获取并下载图片的方法

    Python使用Selenium批量自动化获取并下载图片的方法

    在现代的Web开发中,自动化测试和数据抓取已经成为不可或缺的一部分,Selenium作为一款强大的自动化测试工具,可以用于批量获取网页上的图片,所以本文给大家介绍了Python如何使用Selenium批量自动化获取并下载图片的方法
    2024-11-11
  • pytorch加载预训练模型与自己模型不匹配的解决方案

    pytorch加载预训练模型与自己模型不匹配的解决方案

    这篇文章主要介绍了pytorch加载预训练模型与自己模型不匹配的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python列表的特点分析

    python列表的特点分析

    在本篇文章里小编个大家整理的是一篇关于python列表的特点分析内容总结,有需要的朋友们可以学习下。
    2021-08-08
  • python中使用 xlwt 操作excel的常见方法与问题

    python中使用 xlwt 操作excel的常见方法与问题

    这篇文章主要给大家介绍了关于python中使用 xlwt 操作excel的常见方法与问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • python3 读取Excel表格中的数据

    python3 读取Excel表格中的数据

    这篇文章主要介绍了python3 读取Excel表格中的数据的相关资料,需要的朋友可以参考下
    2018-10-10
  • 详解Python的数据库操作(pymysql)

    详解Python的数据库操作(pymysql)

    这篇文章主要介绍了Python的数据库操作(pymysql),非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • Python代码实现双链表

    Python代码实现双链表

    这篇文章主要为大家详细介绍了Python代码实现双链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • django使用haystack调用Elasticsearch实现索引搜索

    django使用haystack调用Elasticsearch实现索引搜索

    这篇文章主要介绍了django使用haystack调用Elasticsearch实现索引搜索,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论