Python re模块核心函数详解:match、search、sub、split与compile用法

林舟
林舟
发布时间:2026-10-16 | 3人浏览过
原创

本文详细介绍Python中re模块的核心函数,包括re.match从头匹配、re.search全局搜索、re.sub字符串替换、re.split分割以及re.compile预编译优化。通过具体代码示例解析各函数的参数含义、返回值及实际应用场景,帮助开发者掌握正则处理技巧。

re.match:从头匹配字符串

re.match


re.match 函数尝试从字符串的起始位置匹配一个模式。如果起始位置符合正则表达式,则返回匹配对象;否则返回 None。以下示例演示如何匹配字符串中的第一个单词。


复制代码

代码如下:


import re


text = "JGood is a handsome boy, he is cool, clever, and so on..."


m = re.match(r"(\w+)\s", text)


if m:


print m.group(0), '\n', m.group(1)


else:


print 'not match'



re.match 的函数原型为:re.match(pattern, string, flags)。


第一个参数 pattern 是正则表达式,例如本例中的 "(\w+)\s"。若匹配成功,返回一个 Match 对象;否则返回 None。


第二个参数 string 表示待匹配的原始字符串。


第三个参数 flags 用于控制正则表达式的匹配行为,例如是否区分大小写、是否进行多行匹配等。


re.search:全局搜索第一个匹配

re.search


re.search 函数会在整个字符串中查找第一个匹配模式的子串,一旦找到即返回匹配对象;如果未找到任何匹配,则返回 None。


复制代码

代码如下:


import re


text = "JGood is a handsome boy, he is cool, clever, and so on..."


m = re.search(r'\shan(ds)ome\s', text)


if m:


print m.group(0), m.group(1)


else:


print 'not search'



re.search 的函数原型为:re.search(pattern, string, flags)。


其各参数的含义与 re.match 完全一致。


re.match 与 re.search 的主要区别在于:re.match 仅从字符串起始位置开始匹配,若起始字符不符合正则表达式则直接失败并返回 None;而 re.search 会扫描整个字符串,直到找到第一个匹配项为止。


re.sub:字符串替换与函数处理

re.sub


re.sub 用于替换字符串中符合正则表达式的子串。以下示例演示如何将字符串中的所有空格替换为连字符 '-'。


复制代码

代码如下:


import re


text = "JGood is a handsome boy, he is cool, clever, and so on..."


print re.sub(r'\s+', '-', text)



re.sub 的函数原型为:re.sub(pattern, repl, string, count)。


其中 repl 参数指定替换后的字符串,本例中为 '-'。


count 参数指定替换的次数。默认值为 0,表示替换所有匹配项。


re.sub 还支持使用函数作为替换逻辑,以实现更复杂的处理。例如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0),该代码将字符串中的每个空格替换为 '[ ]'。


re.split 与 re.findall:分割与提取

re.split


可以使用 re.split 根据正则表达式分割字符串。例如:re.split(r'\s+', text),该操作将字符串按连续空格分割为一个单词列表。


re.findall


re.findall 用于获取字符串中所有符合正则表达式的子串列表。例如:re.findall(r'\w*oo\w*', text),该操作提取字符串中包含 'oo' 的所有单词。


re.compile:预编译优化性能

re.compile


可以使用 re.compile 将正则表达式编译为正则表达式对象。对于频繁使用的正则表达式,预编译为对象能显著提升执行效率。以下示例展示了正则表达式对象的使用方式。


复制代码

代码如下:


import re


text = "JGood is a handsome boy, he is cool, clever, and so on..."


regex = re.compile(r'\w*oo\w*')


print regex.findall(text) #查找所有包含'oo'的单词


print regex.sub(lambda m: '[' + m.group(0) + ']', text) #将字符串中含有'oo'的单词用[]括起来。



如需更详细的信息,请参阅 Python 官方文档。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表