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

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

ztj100 2025-06-19 02:20 46 浏览 0 评论


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())

相关推荐

Linux集群自动化监控系统Zabbix集群搭建到实战

自动化监控系统...

systemd是什么如何使用_systemd/system

systemd是什么如何使用简介Systemd是一个在现代Linux发行版中广泛使用的系统和服务管理器。它负责启动系统并管理系统中运行的服务和进程。使用管理服务systemd可以用来启动、停止、...

Linux服务器日常巡检脚本分享_linux服务器监控脚本

Linux系统日常巡检脚本,巡检内容包含了,磁盘,...

7,MySQL管理员用户管理_mysql 管理员用户

一、首次设置密码1.初始化时设置(推荐)mysqld--initialize--user=mysql--datadir=/data/3306/data--basedir=/usr/local...

Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门

1.1数据库的核心概念在开始Python数据库编程之前,我们需要先理解几个核心概念。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它就像一个电子化的文件柜,能让我们高效...

Linux自定义开机自启动服务脚本_linux添加开机自启动脚本

设置WGCloud开机自动启动服务init.d目录下新建脚本在/etc/rc.d/init.d新建启动脚本wgcloudstart.sh,内容如下...

linux系统启动流程和服务管理,带你进去系统的世界

Linux启动流程Rhel6启动过程:开机自检bios-->MBR引导-->GRUB菜单-->加载内核-->init进程初始化Rhel7启动过程:开机自检BIOS-->M...

CentOS7系统如何修改主机名_centos更改主机名称

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文将讲解CentOS7系统如何修改主机名。...

前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令

在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...

Linux开机自启服务完全指南:3步搞定系统服务管理器配置

为什么需要配置开机自启?想象一下:电商服务器重启后,MySQL和Nginx没自动启动,整个网站瘫痪!这就是为什么开机自启是Linux运维的必备技能。自启服务能确保核心程序在系统启动时自动运行,避免人工...

Kubernetes 高可用(HA)集群部署指南

Kubernetes高可用(HA)集群部署指南本指南涵盖从概念理解、架构选择,到kubeadm高可用部署、生产优化、监控备份和运维的全流程,适用于希望搭建稳定、生产级Kubernetes集群...

Linux项目开发,你必须了解Systemd服务!

1.Systemd简介...

Linux系统systemd服务管理工具使用技巧

简介:在Linux系统里,systemd就像是所有进程的“源头”,它可是系统中PID值为1的进程哟。systemd其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...

Red Hat Enterprise Linux 10 安装 Kubernetes (K8s) 集群及高级管理

一、前言...

Linux下NetworkManager和network的和平共处

简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...

取消回复欢迎 发表评论: