京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者:極光
来源:Python 技术
正则表达式相信大家应该都不陌生,本质上就是一种微小的、高度专业化的编程语言,使用它你可以为要匹配的可能字符串集指定规则。大多数编程语言正则语法基本相似,只是实现正则的函数库不同,今天就来跟大家一起了解下 Python 支持正则表达式的函数。
正则最简单的应用,就是对字符串进行操作,用来找出想要匹配的字符串,比如 Python 就只会匹配字符串 Python ,当然也可以设置不区分大小写,这样就可以匹配更多,比如 python、pyThon等。
如果还想来点复杂的匹配要怎么做,这就需要用到元字符了,下面就是所有的元字符:
// 元字符 [ ] ( ) . ^ $ * + ? { } |
这一对元字符主要用于指定字符类,也就是你想要匹配的一组字符。
比如:[asd] 就是要匹配任何字符 a, s, d,但如果想匹配 a b c d e …… x y z 是不是要把所有的都写一遍?当然不是了,这个我们可以写成 [a-z] 就行了,- 就是用来表示一个范围,再比如表示数字 1 至 9,可以写成 [1-9] 。
上面说的是包含的字符范围,如果想匹配不包含的范围要怎么做?这就要用到元字符 ^,比如匹配除了 n, u, 3 之外的字符,可以写成 [^nu3]。
还有一点需要注意,在 [ ] 中的元字符会作为普通字符匹配,比如 [$+] 就会匹配 $, +。
最后说下元字符 ,它的意义是用于转义所有元字符,也就是去掉元字符的特殊性,比如 {$\,其实就是匹配字串 {, $, 。
上面说了 [a-z] 可以匹配所有小写字母,[0-9] 用来匹配所有数字,这样已经够简单了,还有更简单的几种特殊范围表达方式。
字符说明.匹配除 "n" 之外的任何单个字符。要匹配包括 'n' 在内的任何字符,请使用象 '[.n]' 的模式。d相当于[0-9],即匹配一个数字字符。D相当于[^0-9],即匹配一个非数字字符。s相当于[fnrtv],也就是匹配任何空白字符,包括空格、制表符、换页符等等。S相当于[^fnrtv],匹配任何非空白字符。w相当于[a-zA-Z0-9_],匹配任何字母与数字字符。W相当于[^a-zA-Z0-9_],匹配任何非字母与数字字符。
上面这些特殊序列可以包含在字符类中,比如 [sd,] 即匹配任何空白字符,数字和 ,。
只是做到匹配字符串集合,肯定是不够的,它还有个更大的优势,那就是可以指定某一部分字符是重复的,并且可以指定重复的次数。
先说第一个表示重复的元字符 *,它用来指定前面一个字符可以重复0次或者多次。
比如 ap*le 将会匹配 apple,appple,ale 等等。
这里当重复正则时,匹配引擎会尝试尽可能多的重复它。当发现模式的后续部分不匹配,则匹配引擎将会回退并以较少的重复次数再次尝试。
另一个重复的元字符 +,它用来表示前一个字符可重复1次或多次。它跟 * 相比,其实就是少了一个重复0次,也就是上面 ap*le 换成 ap+le 不会出现匹配到 ale。
第三个元字符就是 ?,它用来表示前一个字符可重复0次或1次,把上面的例子换成 ap?le,其实就是两个字符串 ale 或 aple。
最后一个复杂些就是 {m,n},这个表示前一个字符可重复次数是一个区间,也就是最少重复m次,最多重复n次。
例如 ap{2,3}le将会匹配 apple,appple 两个字符串,其他都不会匹配。
在这里需要注意下,m 需要小于 n,当然 m 或 n 也是可以省略的。比如当 m=0 时,可以省略 m,当 n 为无穷大时,也可以省略 n。
对!你没看错,如果想使用正则表达式,首先得要把它编译成模式对象。编译成对象后,它就可以使用各种操作方法了,比如字串匹配查询或替换等。
Python 编译的方法是 re.compile('正则表达式'),比如 re.compile('ap?le')。
当然也可以传一些特殊的参数,比如忽略大小写,那上面的编译方法就可以写成 re.compile('ap?le', re.IGNORECASE),这样在匹配字串时就可以忽略大小写了。
那除了这个还有别的参数吗?有,下面我把一部分常用的参数列出来,对了参数还可以简写,比如刚才使用的 re.IGNORECASE 可以简写成 re.I,这样就方便多了。
以下是常用编译参数:
参数简写说明IGNORECASEI忽略大小写ASCIIA使几个转义(w、b、s和d)匹配仅与具有相应特征属性的 ASCII 字符匹配DOTALLS使 . 匹配任何字符,包括换行符LOCALEL进行区域设置感知匹配MULTILINEM多行匹配,影响 ^ 和 $VERBOSEX忽略正则字符串中的空格,除非空格位于字符类中或前面带有未转义的反斜杠,可以组织和缩进,还可以写注释
大部分都容易理解,只是最后一个参数 VERBOSE 可能不太容易理解,这里给大家个官方的例子看下就理解了。
test = re.compile(r"""
&[#] # 数字开始部分
(
0[0-7]+ # 八进制
| [0-9]+ # 小数形式
| x[0-9a-fA-F]+ # 十六进制
)
; # 结束分号
""", re.VERBOSE)
其实上面说的编译都只是在做准备,准备接下来要介绍的,正则表达式最重要的查询匹配。
常用匹配方法:
上面这些方法,如果匹配成功,会返回一个对象实例,其中包含匹配相关的信息:起始和终结位置、匹配的子串以及其它信息。
// 示例代码
import re
ret = re.compile('[0-9]+')
ret.match("apple") // 返回 None
ret.match("12189") // 返回 <re.Match object; span=(0, 5), match='12189'>
ret.match("121ab") // 返回 <re.Match object; span=(0, 3), match='121'>
好了,今天我们简单介绍了下正则表达式,以及在 Python 中如何使用正则表达式,其实以上这些只是基础,后续还会为大家介绍更多。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA持证人已遍布在世界范围各行各业,包括世界500强企业、顶尖科技独角兽、大型金融机构、国企事业单位、国家行政机关等等,“CDA数据分析师”人才队伍遵守着CDA职业道德准则,发挥着专业技能,已成为支撑科技发展的核心力量。 ...
2026-01-22在数字化时代,企业积累的海量数据如同散落的珍珠,而数据模型就是串联这些珍珠的线——它并非简单的数据集合,而是对现实业务场 ...
2026-01-22在数字化运营场景中,用户每一次点击、浏览、交互都构成了行为轨迹,这些轨迹交织成海量的用户行为路径。但并非所有路径都具备业 ...
2026-01-22在数字化时代,企业数据资产的价值持续攀升,数据安全已从“合规底线”升级为“生存红线”。企业数据安全管理方法论以“战略引领 ...
2026-01-22在SQL数据分析与业务查询中,日期数据是高频处理对象——订单创建时间、用户注册日期、数据统计周期等场景,都需对日期进行格式 ...
2026-01-21在实际业务数据分析中,单一数据表往往无法满足需求——用户信息存储在用户表、消费记录在订单表、商品详情在商品表,想要挖掘“ ...
2026-01-21在数字化转型浪潮中,企业数据已从“辅助资源”升级为“核心资产”,而高效的数据管理则是释放数据价值的前提。企业数据管理方法 ...
2026-01-21在数字化商业环境中,数据已成为企业优化运营、抢占市场、规避风险的核心资产。但商业数据分析绝非“堆砌数据、生成报表”的简单 ...
2026-01-20定量报告的核心价值是传递数据洞察,但密密麻麻的表格、复杂的计算公式、晦涩的数值罗列,往往让读者望而却步,导致核心信息被淹 ...
2026-01-20在CDA(Certified Data Analyst)数据分析师的工作场景中,“精准分类与回归预测”是高频核心需求——比如预测用户是否流失、判 ...
2026-01-20在建筑工程造价工作中,清单汇总分类是核心环节之一,尤其是针对楼梯、楼梯间这类包含多个分项工程(如混凝土浇筑、钢筋制作、扶 ...
2026-01-19数据清洗是数据分析的“前置必修课”,其核心目标是剔除无效信息、修正错误数据,让原始数据具备准确性、一致性与可用性。在实际 ...
2026-01-19在CDA(Certified Data Analyst)数据分析师的日常工作中,常面临“无标签高维数据难以归类、群体规律模糊”的痛点——比如海量 ...
2026-01-19在数据仓库与数据分析体系中,维度表与事实表是构建结构化数据模型的核心组件,二者如同“骨架”与“血肉”,协同支撑起各类业务 ...
2026-01-16在游戏行业“存量竞争”的当下,玩家留存率直接决定游戏的生命周期与商业价值。一款游戏即便拥有出色的画面与玩法,若无法精准识 ...
2026-01-16为配合CDA考试中心的 2025 版 CDA Level III 认证新大纲落地,CDA 网校正式推出新大纲更新后的第一套官方模拟题。该模拟题严格遵 ...
2026-01-16在数据驱动决策的时代,数据分析已成为企业运营、产品优化、业务增长的核心工具。但实际工作中,很多数据分析项目看似流程完整, ...
2026-01-15在CDA(Certified Data Analyst)数据分析师的日常工作中,“高维数据处理”是高频痛点——比如用户画像包含“浏览次数、停留时 ...
2026-01-15在教育测量与评价领域,百分制考试成绩的分布规律是评估教学效果、优化命题设计的核心依据,而正态分布则是其中最具代表性的分布 ...
2026-01-15在用户从“接触产品”到“完成核心目标”的全链路中,流失是必然存在的——电商用户可能“浏览商品却未下单”,APP新用户可能“ ...
2026-01-14