Python 正则表达式 re.match、re.search 与 re.sub 函数详解
本文详细解析Python中正则表达式模块re的三个核心函数:re.match、re.search和re.sub。通过对比说明match仅匹配字符串起始位置,search扫描整个字符串,而sub用于执行字符串替换。文章提供具体代码示例、参数说明及常用正则模式表,帮助开发者准确掌握字符串匹配与处理技巧。
本文主要介绍Python中正则表达式模块re的相关使用方法。
re.match 函数详解
函数定义为 re.match(pattern, string, flags=0)。
该函数尝试从字符串的起始位置开始匹配正则表达式模式。如果起始位置无法匹配成功,则函数返回 None。
若匹配成功,re.match() 将返回一个匹配对象;若失败,则返回 None。
pattern:表示需要匹配的正则表达式规则。
string:表示需要进行匹配操作的原始字符串。
flags:标志位,用于控制正则表达式的匹配行为,例如是否区分大小写、是否进行多行匹配等。
示例代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
output:
(0, 3)
None
re.search 函数详解
函数定义为 re.search(pattern, string, flags=0)。
该函数会扫描整个字符串,并返回第一个匹配成功的结果。
若匹配成功,re.search() 返回一个匹配对象;否则返回 None。
示例代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配
output:
(0, 3)
(11, 14)
match 与 search 的区别
re.match() 仅尝试匹配字符串的开头部分。如果字符串起始位置不符合正则表达式的要求,则匹配失败,函数返回 None。
re.search() 则会扫描整个字符串,直到找到第一个符合正则表达式的匹配项为止。
re.sub 替换函数详解
函数定义为 re.sub(pattern, repl, string, count=0, flags=0)。
该函数用于在字符串中替换匹配正则表达式的子串。
pattern:表示正则表达式中的模式字符串。
repl:表示替换后的字符串,也可以是一个用于生成替换内容的函数。
string:表示原始字符串,即被查找和替换的目标字符串。
count:表示替换的最大次数。默认为 0,表示替换所有匹配到的子串。
示例代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
phone = "2004-959-559
# 删除字符串中的 Python注释
num = re.sub(r'#.*$', "", phone)
print "电话号码是: ", num
# 删除非数字(-)的字符串
num = re.sub(r'\D', "", phone)
print "电话号码是 : ", num
output:
电话号码是: 2004-959-559
电话号码是 : 2004959559
正则表达式模式与实例
以下是正则表达式中常用的模式符号说明。
| 模式 | 描述 |
|---|---|
| ^ | 匹配字符串的开头 |
| $ | 匹配字符串的末尾 |
| . | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符 |
| […] | 用来表示一组字符,单独列出:[amk] 匹配 ‘a','m'或'k' |
| [^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符 |
| re* | 匹配0个或多个的表达式 |
| re+ | 匹配1个或多个的表达式 |
| re? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
| re{ n} | |
| re{ n,} | 精确匹配n个前面表达式 |
| re{ n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 |
| aIb | 匹配a或b |
| (re) | G匹配括号内的表达式,也表示一个组 |
| (?imx) | 正则表达式包含三种可选标志:i, m, 或 x, 只影响括号中的区域 |
| (?-imx) | 正则表达式关闭 i, m, 或 x 可选标志, 只影响括号中的区域 |
| (?: re) | 类似 (…), 但是不表示一个组 |
| (?imx: re) | 在括号中使用i, m, 或 x 可选标志 |
| (?-imx: re) | 在括号中不使用i, m, 或 x 可选标志 |
| (?#…) | 注释 |
| (?= re) | 前向肯定界定符. 如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败. 但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边. |
| (?! re) | 前向否定界定符. 与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功 |
| (?> re) | 匹配的独立模式,省去回溯 |
| \w | 匹配字母数字及下划线 |
| \W | 匹配非字母数字及下划线 |
| \s | 匹配任意空白字符,等价于 [\t\n\r\f] |
| \S | 匹配任意非空字符 |
| \d | 匹配任意数字,等价于 [0-9]. |
| \D | 匹配任意非数字 |
| \A | 匹配字符串开始 |
| \Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 |
| \z | 匹配字符串结束 |
| \G | 匹配最后匹配完成的位置 |
| \b | 匹配一个单词边界,也就是指单词和空格间的位置.例如, ‘er\b' 可以匹配”never” 中的 ‘er',但不能匹配 “verb” 中的 ‘er'. |
| \B | 匹配非单词边界. ‘er\B' 能匹配 “verb” 中的 ‘er',但不能匹配 “never” 中的 ‘er'. |
| \n, \t, 等. | 匹配一个换行符。匹配一个制表符, 等 |
| \1…\9 | 匹配第n个分组的内容. |
| \10 | 匹配第n个分组的内容,如果它经匹配. 否则指的是八进制字符码的表达式. |
以下是正则表达式的常用实例对照表。
| 实例 | 描述 |
|---|---|
| python | 匹配 “python” |
| [Pp]ython | 匹配 “Python” 或 “python” |
| rub[ye] | 匹配 “ruby” 或 “rube” |
| [aeiou] | 匹配中括号内的任意一个字母 |
| [0-9] | 匹配任何数字,类似于 [0123456789] |
| [a-z] | 匹配任何小写字母 |
| [A-Z] | 匹配任何大写字母 |
| [a-zA-Z0-9] | 匹配任何字母及数字 |
| [^aeiou] | 除了aeiou字母以外的所有字符 |
| [^0-9] | 匹配除了数字外的字符 |
| . | 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n' 在内的任何字符,请使用象 ‘[.\n]' 的模式. |
| \d | 匹配一个数字字符, 等价于 [0-9]. |
| \D | 匹配一个非数字字符, 等价于 [^0-9]. |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等, 等价于 [ \f\n\r\t\v]. |
| \S | 匹配任何非空白字符, 等价于 [^ \f\n\r\t\v]. |
| \w | 匹配包括下划线的任何单词字符, 等价于'[A-Za-z0-9_]'. |
| \W | 匹配任何非单词字符, 等价于 ‘[^A-Za-z0-9_]'. |
以上内容为Python正则表达式 re.match、re.search 及 re.sub 函数的使用解析,供参考学习。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













