Python正则表达式核心用法与实战指南
本文系统梳理Python中正则表达式(re模块)的核心功能,详细解析match、search、findall及finditer等关键查找方法的差异与适用场景。深入讲解re.Match对象的使用、常见模式符号、替换操作以及贪婪与非贪婪模式的转换技巧,并通过用户名、手机号及数字范围匹配等具体代码示例,帮助开发者掌握高效处理字符串匹配与替换的实际应用。
一、介绍
正则表达式本质上是一种由特殊字符构成的序列,属于计算机科学中的重要概念。它主要用于检索和替换那些符合特定模式(规则)的文本内容。
众多编程语言均支持利用正则表达式进行字符串操作。在Python中,若需通过正则表达式对字符串执行匹配任务,可借助内置的re模块。该模块赋予了Python语言完整的正则表达式处理能力。
二、查找方法的使用
1、match方法(仅匹配字符串开头)
re.match函数尝试从字符串的起始位置开始匹配指定的模式。若起始位置无法匹配成功,该函数将返回None;若匹配成功,则返回一个Match对象,需调用其group()方法来获取匹配的具体值。
调用group(0)可返回整个匹配到的所有内容(默认参数为0)。

函数语法如下:
re.match(pattern, string, flags=0)


2、search方法(扫描整个字符串,定位首个匹配项)
re.search函数会扫描整个字符串,并返回第一个匹配成功的结果。
函数语法如下:
re.search(pattern, string, flags=0)
3、re.match与re.search的区别
re.match仅从字符串的开头进行匹配,若开头不符合正则表达式定义,则匹配失败并返回None;而re.search则会扫描整个字符串,直至找到第一个符合要求的匹配项为止。
4、findall方法(扫描整个字符串,提取所有匹配项)
该方法用于在字符串中查找正则表达式所匹配的所有子串,并以列表形式返回。若未找到任何匹配内容,则返回空列表。
需注意:match和search仅执行一次匹配,而findall则执行全局匹配。
语法格式如下:
re.findall(pattern, string, flags=0)
示例代码如下:


5、finditer方法(扫描整个字符串,返回所有匹配的可迭代对象)
其功能与findall类似,旨在字符串中查找正则表达式匹配的所有子串,但将这些子串封装为一个迭代器对象返回。
ret = re.finditer(r'\d+','he23ll34') # 得到的结果是一个可迭代对象
for x in ret: # 遍历 ret 取出里面的每一项匹配
print(x.group(), x.span()) # 匹配对象里的group保存了匹配的结果三、re.Match类介绍
当我们调用re.match方法、re.search方法,或者对re.finditer方法的结果进行迭代时,拿到的数据类型都是re.Match对象。


四、正则表达式模式
1、非打印字符

2、特殊字符

3、定位符

4、限定符

五、替换
语法如下:
re.sub(pattern, repl, string, count=0)

六、贪婪模式和非贪婪模式
Python中的数量词默认采用贪婪模式(部分其他语言可能默认非贪婪),即总是尝试匹配尽可能多的字符。
非贪婪模式则相反,总是尝试匹配尽可能少的字符。
在*,?,+,{m,n}后面加上 ?即可使贪婪模式转换为非贪婪模式。

七、示例
1、匹配用户名
用户名匹配规则:由数字、大小写字母、下划线_和中横线-组成,长度限制为4到14位,且不能以数字开头。
符号^在括号外表示字符串开头,在括号内则表示取反。
\D用于匹配一个非数字字符,其效果等价于[^0-9]。
[a-z0-9A-Z_\-]{3,13}表示可取范围为a-z的小写字母、数字0-9以及下划线和中横线,这些字符写在中括号内表示逻辑与的关系。最后的大括号代表匹配长度为[3-13](左闭右闭区间),因为开头已有一位确定的字符,故后续长度需在此范围内。
示例代码:r'^\D[a-z0-9A-Z_\-]{3,13}', 'sH_8'
2、匹配手机号
依据手机号规则,对手机号前三位格式进行了限制。由于存在多种合法格式,各条件之间为逻辑或关系,在正则表达式中使用|符号表示。
示例代码:r'^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$'
3、匹配0~99之间的数字
首位数字为【1-9】中的一个,且该位数字出现的次数为0次或1次均可。
后续数字为【0-9】中的一个,且该位数字出现的次数为0次或1次。
示例代码:r'^[1-9]?[0-9]?$'
总结
到此这篇关于python正则表达式常见知识点的文章就介绍到这了,更多相关python正则表达式知识点内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













