Python正则表达式字符串处理方法示例(re库)

 更新时间:2026年07月08日 09:35:43   作者:F_leshy_  
正则表达式是通过符号系统描述文本模式并匹配文本的工具,下面这篇文章主要介绍了Python正则表达式字符串处理方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

正则表达式到底是什么?

简单来说,正则表达式就是一种字符串匹配的“规则表达式”。它能让你从一大段文本里快速筛选、替换符合特定模式的内容,比如验证手机号、提取邮箱、清洗数据等等。在 Python 里,我们只需要导入 re 库就能使用它。

核心匹配函数:match、search、findall

这三个函数是正则表达式的基础,也是最常用的工具,我们一个一个来看。

1. match():只在字符串开头匹配

• 它会从字符串的起始位置开始检查是否匹配规则

• 如果开头不匹配,直接返回 None

• 成功匹配则返回一个匹配对象,包含匹配的位置和内容

import re
message = '张三、李四、王五、赵六'
result = re.match('张三',message)
print(result)

这个例子里,'张三' 正好在字符串开头,所以匹配成功。如果我们用 match('李四', message),就会返回 None,因为它不在开头。

2. search():扫描整个字符串

• 它会扫描整个字符串,找到第一个符合规则的内容

• 不管位置在哪里,只要找到一个就返回结果

• 同样返回匹配对象或 None

import re
message = '张三、李四、王五、赵六'
result = re.search('王五',message)
print(result)

这里 '王五' 不在开头,但 search() 还是找到了它。这就是和 match() 最大的区别。

3. findall():找出所有匹配内容

• 它会扫描整个字符串,把所有符合规则的内容都找出来

• 返回一个列表,包含所有匹配到的子串

import re
message = '张三、李四、王五、赵六、王五'
result = re.findall('王五',message)
print(result)

正则表达式的语法规则

掌握了基本函数,接下来就是学习如何写“规则”了。正则表达式有一套自己的语法,我们来看几个最常用的。

1. 字符范围

[a-z]匹配任意小写字母
[A-Z]匹配任意大写字母
[0-9]匹配任意数字
[a-zA-Z0-9]匹配任意字母或数字
import re
message = 'Python93,C87,Java63,C++88'
result_1 = re.search('[cn]',message)
result_2 = re.findall('[0-9]',message)
result_3 = re.findall('[cn][0-9]',message)
print(result_1,result_2,result_3)

2. 匹配次数

*匹配前面的表达式 0 次或多次
+匹配前面的表达式 1 次或多次
?匹配前面的表达式 0 次或 1 次
^匹配输入行首
$匹配输入行尾
{n}匹配前面的表达式正好 n 次
{n,}匹配前面的表达式至少 n 次
{n,m}匹配前面的表达式 n 到 m 次
import re
message = 'da2a7ddbre77yifed777t3fefd7777b'
result = re.findall('[a-z]*[0-9][a-z]',message)
print(result)

验证手机号码的正确性:

import re
phone_num = input("请输入您的手机号码:")
result = re.findall('^1[0-9]{10}$',phone_num)
print(result)

验证QQ号码是否合规:

import re
QQ_num = input("请输入您的QQ号: ")
result = re.match('[1-9][0-9]{4,10}$',QQ_num)
print(result)

验证网站用户名:

import re
use_name = input("请输入您的用户名: ")
result = re.findall('^[A-Za-z_]\w{7,}$',use_name)
print(result)

import re
use_name = input("请输入您的用户名: ")
result = re.findall('^[A-Za-z_]\w{7,}$',use_name)
print(result)

3. 特殊字符

\d

匹配一个数字类字符,等价于 [0-9]

\D匹配一个非数字类字符,等价于[^0-9]
\s匹配任意不可见字符,等价于[\f\n\r\t\v]
\S匹配任何可见字符,等价于[^\f\n\r\t\v]
\w匹配包括下划线的任何单词字符,等价于 [a-zA-Z0-9_]
\W匹配任何不包括下划线的非单词字符,等价于[^A-Za-z0-9_]
\b匹配一个单词的边界,即单词与空格邻接的字符
\B匹配非单词边界
\f匹配一个分页符
\n匹配一个换行符
\r匹配一个回车符
\t匹配一个制表符
\v匹配一个垂直制表符
.匹配除\n和\r之外的任何单个字符
import re
message = 'verb very never every'
result = re.findall(r'\w+er\B',message)
print(result)

import re
message = 'verb very never every'
result = re.findall('.e',message)
print(result)

贪婪与非贪婪模式

贪婪模式:正则表达式默认是贪婪模式,匹配形式是尝试匹配尽可能多的字符,只要满足正则表达式要求会匹配最多的字符。

非贪婪模式:匹配形式是尝试匹配尽可能少字符,一旦满足正则表达式要求就不再继续匹配。

import re
message = 'ccc739134792hd'
result = re.findall('ccc\d+',message)
print(result)

import re
message = 'ccc739134792hd'
result = re.findall('ccc\d+?',message)
print(result)

或和组 

如果需要筛选出组合条件下的字符数据,可以使用或。如果需要筛选后的某部分内容,可以使用组。

1.或:用 | 表示,表示将两个匹配条件进行逻辑“或”(or)运算。

import re
message = 'verb very never every'
result = re.findall('\w+evI\w+ry',message)
print(result)

2.组:用(表达式)表示,表示将()中的表达式定义为组,并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个组)。

import re
message = 'verb very never every'
result = re.findall("e(.+)(.)r",message)
print(result)

进阶功能:sub() 和 compile()

除了匹配,正则表达式还有两个非常实用的功能。

1. sub():替换匹配内容

这个函数可以把字符串中所有匹配到的内容替换成新的字符串。

import re
content = 'dh9322hf9f934hfnf39d'
content = re.sub('\d','0',content)
print(content)

2. compile():预编译正则表达式

如果你需要多次使用同一个正则表达式,可以先预编译它,这样能提高效率。

import re
contentl = '2020 12 15 12:00'
pattern = re.compile('\d{2}:\d{2}')
print(pattern.findall(contentl))

学习正则表达式的小建议

1. 从小例子开始:不要一开始就写复杂的正则,先从匹配单个字符、简单数字开始,慢慢增加复杂度。

2. 多用在线工具测试:比如 Regex101,可以实时看到你的正则表达式匹配了什么,非常方便调试。

3. 别怕记不住:正则表达式的语法确实多,但常用的其实就那几个。用得多了自然就记住了,记不住的时候随时查文档就好。

4. 先思考再动手:在写正则之前,先想清楚你要匹配的内容有什么规律,比如手机号的格式、邮箱的结构,然后再把这些规律转化成正则表达式。
正则表达式就像一把瑞士军刀,虽然看起来复杂,但一旦掌握了它,处理字符串的效率会大大提高。希望这篇文章能帮你迈出学习正则表达式的第一步。

总结

到此这篇关于Python正则表达式字符串处理方法的文章就介绍到这了,更多相关Python正则字符串处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python访问系统环境变量的方法

    python访问系统环境变量的方法

    这篇文章主要介绍了python访问系统环境变量的方法,涉及Python操作系统环境变量的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Django数据库操作的实例(增删改查)

    Django数据库操作的实例(增删改查)

    下面小编就为大家带来一篇Django数据库操作的实例(增删改查)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 基于Python绘制世界疫情地图详解

    基于Python绘制世界疫情地图详解

    这篇文章主要介绍了如何使用Python绘制世界疫情地图,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 对python 生成拼接xml报文的示例详解

    对python 生成拼接xml报文的示例详解

    今天小编就为大家分享一篇对python 生成拼接xml报文的示例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Django中的事务ATOMIC_REQUESTS

    Django中的事务ATOMIC_REQUESTS

    这篇文章主要介绍了Django中的事务ATOMIC_REQUESTS使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程

    解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程

    这篇文章主要介绍了解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程,本文图文并茂给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • python 拷贝特定后缀名文件,并保留原始目录结构的实例

    python 拷贝特定后缀名文件,并保留原始目录结构的实例

    下面小编就为大家分享一篇python 拷贝特定后缀名文件,并保留原始目录结构的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 详解Scrapy Redis入门实战

    详解Scrapy Redis入门实战

    这篇文章主要介绍了详解Scrapy Redis入门实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python库安装加速之使用清华大学镜像源的详细指南

    Python库安装加速之使用清华大学镜像源的详细指南

    这篇文章主要介绍了如何通过清华大学镜像源加速Python库安装,提供临时指定和永久配置方法,并列举阿里云、中科大、豆瓣等其他镜像源,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-06-06
  • 详解Python中enumerate函数的使用

    详解Python中enumerate函数的使用

    Python 的 enumerate() 函数就像是一个神秘的黑箱,它具有非常有用的高级用法。本文就来为大家详细讲一下它的使用,需要的可以参考一下
    2022-08-08

最新评论