百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

强烈推荐!Python 这个宝藏库 re 正则匹配

moboyou 2025-06-30 20:57 3 浏览


Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作。

在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面总结了 re 模块的常用方法。


一. 预定义字符

\d 匹配所有的十进制数字 0-9

\D 匹配所有的非数字,包含下划线

\s 匹配所有空白字符(空格、TAB等)

\S 匹配所有非空白字符,包含下划线

\w 匹配所有字母、汉字、数字 a-z A-Z 0-9

\W 匹配所有非字母、汉字、数字,包含下划线


二. 特殊字符

  1. $:匹配一行的结尾(必须放在正则表达式最后面)
  2. ^:匹配一行的开头(必须放在正则表达式最前面)
  3. *:前面的字符可以出现0次或多次(0~无限)(贪婪匹配)
  4. +:前面的字符可以出现1次或多次(1~无限)(贪婪匹配)
  5. ?:变"贪婪模式"为"勉强模式",前面的字符可以出现0次或1次(非贪婪匹配)

备注:符号.* 贪婪,符号.*? 非贪婪

  1. .:匹配除了换行符"\n"之外的任意单个字符
  2. |:两项都进行匹配
  3. [ ]:代表一个集合,有如下三种情况

[abc]:能匹配其中的单个字符

[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)

[2-9] [1-3]:能够做组合匹配

4.{ }:用于标记前面的字符出现的频率,有如下情况:

{n,m}:代表前面字符最少出现n次,最多出现m次

{n,}:代表前面字符最少出现n次,最多不受限制

{,m}:代表前面字符最多出现n次,最少不受限制

{n}:前面的字符必须出现n次


三. 反斜杠说明

字符串中有反斜杠的,需要对反斜杠做转义


四. 分组

():分组字符,可以为匹配到的内容分组,快速获取到分组中的数据 在正则里面 "()" 代表的是分组的意思,一个括号代表一个分组,你只能匹配到 "()" 中的内容。

group:用于查看指定分组匹配到的内容

groups:返回一个元组,组内为所有匹配到的内容

groupdict:返回一个字典,包含分组的键值对,需要为分组命名


五. 常用方法

  1. match:在目标文本的开头进行匹配
  2. search:在整个目标文本中进行匹配
  3. findall:扫描整个目标文本,返回所有与规则匹配的子串组成的列表,如果没有匹配的返回空列表
  4. split
re.split(pattern, string[, maxsplit=0, flags=0])
split(string[, maxsplit=0])

作用:可以将字符串匹配正则表达式的部分割开并返回一个列表


六. 正则表达式函数里面的flags参数说明

flags定义包括:

re.I:忽略大小写

re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境

re.M:多行模式

re.S:’.’并且包括换行符在内的任意字符(注意:’.’不包括换行符)

re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库

在 Python 中使用正则表达式之前,先使用以下命令导入 re 模块

import re


示例1:具体使用说明

例如:

‘(\d)(a)\1’ 表示:匹配第一是数字,第二是字符a,第三 \1 必须匹配第一个一样的数字重复一次,也就是被引用一次。

如 “9a9” 被匹配,但 “9a8” 不会被匹配,因为第三位的 \1 必须是 9 才可以。

‘(\d)(a)\2’ 表示:匹配第一个是一个数字,第二个是a,第三个 \2 必须是第二组()中匹配一样的。

如 “8aa” 被匹配,但 “8ab”,“7a7” 不会被匹配,第三位必须是第二组字符的复制版,也是就引用第二组正则的匹配内容。

print(re.match(r'(\w{3}).',"abceeeabc456abc789").group())
print(re.match(r'(\w{3}).*',"abceeeabc456abc789").group())#*贪婪匹配
print(re.match(r'(\w{3}).*?',"abceeeabc456abc789").group())#?非贪婪匹配
print(re.search(r'(\d{3})',"abceeeabc456abc789").group())
print(re.search(r'(\w{3})(\d+)(\1)',"abceeeabc456abc789abc").groups())
print(re.search(r'(\w{3})(\d+)(\1)',"abceeeabc456abc789abc").group(1))
print(re.search(r'(\w{3})(\d+)(\1)',"abceeeabc456abc789abc").group(2))
print(re.search(r'(\w{3})(\d+)(\1)',"abceeeabc456abc789abc").group(3))
print(re.search(r'(\w{3})(\d+)(\2)',"abceeeabcs456456abc456789abc").groups())
print(re.search(r'(\w{3})(\d+)(\2)',"abceeeabcs456456abc456789abc").group(1))
print(re.search(r'(\w{3}).*?(\1)',"abceeeabc456abc789abc").group(1))
print(re.search(r'(\w{3}).*?(\1)',"abceeeabc456abc789abc").group(2))
print(re.search(r'(\w{3})(.*?)(\2)',"abceeeabc456abc789").group())
print(re.search(r'(\w{3}).*?(\1)',"abceeeabc456abc789").group(1,2))


print(re.findall(r'\d+','one11two22three33four44'))
print(re.split(r'\W+','192.168.1.1')) #\W匹配所有非字母、汉字、数字,包含下划线,然后处理完成返回一个列表
print(re.split(r'(\W+)','192.168.1.1')) #加了括号后做了分组的处理,.号也被分割了
print(re.split(r'(\W+)','192.168.1.1',1)) #加了一个1这个参数后,表示最大分割深度为1


str1 = '''goodjobisgood:
 testisgood
 welldone
 '''
res1 = re.findall(r'good(.*?)done',str1)

# 如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始,不会跨行。

# 而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将“\n”当做一个普通的字符加入到这个字符串中,在整体中进行匹配。

res2 = re.findall(r'good(.*?)done',str1,re.S)
print(res1)
print(res2)


示例2:网页信息匹配

str1 = '<p>this is a herf<a href="www.baidu.com">goodjob</a></p>'
# find = re.search('<a href="(.+)">(\w+)</a>', str1)
find = re.search('<a href="(?P<url>.+)">(?P<name>\w+)</a>', str1)
print(find.groups())
print(find.group(1))
print(find.group(2))
print(find.groupdict())


示例3:日期匹配

date1=input("请输入年月日:")
result1=re.match(r'^(\d{4}-\d{1,2}-\d{1,2})#39;,date1)
print(result1.group())


示例4:邮箱正则匹配

re_email = r'^[a-zA-Z0-9_]{0,20}@(163|162|Gmail|yahoo)\.com'
email_address = input('请输入邮箱')
res = re.search(re_email, email_address)
print(res)
print(email_address)
print(type(res))
print(res.group())


示例5:手机号匹配

phone=input("请输入手机号:")
result2=re.match(r'1[35678]\d{9}',phone)
print(result2.group())

相关推荐

Python网络爬虫之分析网页

一、分析并提取网页内容的有三种方式o正则表达式(速度最快,但适应变化略差)oBeautifulsoup库(速度是正则表达式的约几分之一)oselenium或pyppeteer的中的浏览器对象的查找元素...

Python进阶-day9:正则表达式

目标学习Python的re模块基础用法。掌握正则表达式的匹配(match,search,findall)、替换(sub)和分割(split)操作。练习:编写代码从一段文本中提取所有邮箱地址。学习内...

Python模块datetime、calendar、logging、argparse、re用法

datetime模块:提供日期和时间相关的功能。importdatetime#获取当前日期和时间current_time=datetime.datetime.now()#格式化日期...

一文讲清怎么利用Python实现Linux系统日志检索分析管理系统

摘要:在现代IT运营与开发中,日志分析早已成为不可或缺的核心环节。无论是排查系统故障、进行安全审计,还是优化服务性能,日志文件始终是最真实、最权威的信息来源。Linux系统作为主流的服务器操作系统,其...

Python基础编程——标准库之shelve模块

在实际开发中,要将数据进行持久化,通常的做法是,将数据保存到文件或者数据库中。Python有多种方法将数据保存到文件中,本节将会介绍使用Python的标准库shelve来将数据保存到文件中。shelv...

使用 Python 开发一个 Python 解释器

原文地址:https://python.plainenglish.io/introduction-to-creating-interpreter-using-python-c2a9a6820aa0原文...

强烈推荐!Python 这个宝藏库 re 正则匹配

Python的re模块(RegularExpression正则表达式)提供各种正则表达式的匹配操作。在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面总结了re模块的常用方...

python入门到脱坑正则表达式—re.match()函数

re.match()是Python正则表达式模块re中的一个重要方法,用于从字符串的起始位置匹配一个模式。下面我将详细介绍它的用法和特点。基本语法re.match(pattern,stri...

Python中使用re模块实现正则表达式的替换字符串操作

#编程语言#我是"学海无涯自学不惜!",关注我,一同学习简单易懂的Python编程。0基础学python(83)Python中,导入re模块后还可以进行字符串的替换操作,就是sub()...

深入理解re模块:Python中的正则表达式神器解析

在Python中,"re"是一个强大的模块,用于处理正则表达式(regularexpressions)。正则表达式是一种强大的文本模式匹配工具,用于在字符串中查找、替换或提取特定模式...

python入门到脱坑正则表达式—re.search()函数

re.search()是Python正则表达式模块re中的核心函数之一,用于在字符串中搜索匹配指定模式的第一个位置。与re.match()不同,它不限制匹配必须从字符串开头开始。基本语法...

python入门到脱坑正则表达式—re.sub()函数

re.sub()是Python正则表达式模块re中用于字符串替换的核心函数,它可以在字符串中搜索匹配正则表达式的部分,并将其替换为指定的内容。基本语法re.sub(pattern,repl...

python之re模块

re模块一.re模块的介绍1.什么是正则表达式"定义:正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符来过滤的逻辑。(也是一种文本模式;)2、正则表达式可以...

Python中re模块详解

在《用最简单的方式教会你使用Python正则》一文中,我们介绍了正则表达式该如何书写,还通过简单的示例介绍了Python中如何通过re模块使用正则功能。今天本文将通过以下内容详细介绍r...

微信积分商城货到付款系统|裂变营销+物流闭环

微信积分商城货到付款系统核心卖点速览零成本运营:免授权+完全开源PHP源码,9MB轻量部署,Mysql数据库高效支撑。灵活支付组合:独创“积分+货到付款+运费”混合支付,用户兑换无忧,商家资金零风险...