
Python3进阶(二) | 正则表达式
发布日期:2021-05-10 06:27:20
浏览次数:31
分类:精选文章
本文共 2771 字,大约阅读时间需要 9 分钟。
正则表达式
正则表达式是一个强大而灵活的工具,用于匹配字符串中的特定模式。Python的re模块提供了完整的正则表达式功能,支持复杂的匹配场景。1.1 re.match函数
re.match用于从字符串的起始位置尝试匹配正则表达式。如果匹配不在起始位置进行,函数将返回None。
语法:
re.match(pattern, string, flags=0)
参数说明:
pattern
:匹配的正则表达式。string
:要匹配的字符串。flags
:正则表达式的标志位,控制匹配方式,如忽略大小写、多行模式等。
方法:
group(num=0)
:返回匹配表达式所对应的字符串,可指定多个组数返回对应的元组。groups()
:返回所有小组字符串的元组,从第1组开始编号。
示例:
import re print(re.match('https', 'https://github.com').group()) print(re.match('com', 'https://github.com'))
1.2 re.search方法
re.search方法会扫描整个字符串,返回第一个匹配的子串。如果未找到匹配,返回None。
语法:
re.search(pattern, string, flags=0)
参数说明:
pattern
:正则表达式。string
:要匹配的字符串。flags
:匹配标志位。
方法:
group(num=0)
:返回匹配表达式所对应的字符串。groups()
:返回所有小组字符串的元组。
示例:
import re print(re.search('https', 'http://github.com').group()) print(re.search('com', 'https://github.com'))
1.3 re.match与re.search的区别
re.match
仅在字符串起始位置进行匹配,匹配不成功则返回None。re.search
则会扫描整个字符串,寻找第一个匹配点。
2. 检索和替换
re.sub
功能强大,支持字符串替换、多种替换模式以及分组查找。
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数说明:
pattern
:正则表达式。repl
:替换字符串,可以是一个常量或一个函数。string
:原始字符串。count
:匹配次数限制, 默认为0,表示替换所有匹配。flags
:正则表达式标志位。
示例:
import re num = re.sub(r'-.*$', "", 'hello world -hello python') print(num)
2.1 compile函数
re.compile
用于创建一个正则表达式对象,用于高效进行多次匹配。
语法:
re.compile(pattern[, flags])
参数说明:
pattern
:正则表达式字符串。flags
:编译标志位,可选。
2.2 findall方法
findall
用于在字符串中找到所有匹配正则表达式的子串,返回一个列表。
语法:
re.findall(string[, pos[, endpos]])
参数说明:
string
:待匹配字符串。pos
:起始位置,默认为0。endpos
:结束位置,默认为字符串长度。
示例:
import re result = re.findall(r'\d+', '1we22a32refbc43jf3') print(result)
2.3 finditer方法
finditer
类似于findall
,但返回的是一个迭代器,逐个提供每个匹配结果。
语法:
re.finditer(pattern, string, flags=0)
参数说明:
pattern
:正则表达式。string
:要匹配的字符串。flags
:正则表达式标志位。
示例:
import re for match in re.finditer(r'\d+', '1we22a32refbc43jf3'): print(match.group())
2.4 split方法
split
方法根据正则表达式分割字符串,支持设置最大分割次数。
语法:
re.split(pattern, string[, maxsplit=0, flags=0])
参数说明:
pattern
:分割正则表达式。string
:要分割的字符串。maxsplit
:分割次数,0表示无限制。flags
:正则表达式标志位。
示例:
import re parts = re.split(r'_[\d]+', 'hello_world_123') print(parts)
3. 正则表达式对象
匹配结果可以通过正则表达式对象获取详细信息,如匹配位置、组数以及更多属性。
group()
:返回匹配表达式对应的字符串。start()
:返回匹配的起始位置。end()
:返回匹配的结束位置。span()
:返回匹配的起始和结束位置作为元组。
4. 正则表达式修饰符
正则表达式支持多种修饰符,通过按位或操作指定。常见修饰符:
修饰符 | 描述 |
---|---|
re.I | 忽略大小写 |
re.L | 本地化匹配 |
re.M | 多行模式 |
re.S | 使. 匹配所有字符 |
re.U | 面向Unicode的字符集 |
re.X | 忽略注释 |
5. 正则表达式模式
正则表达式模式包含多种特殊字符,用于高效匹配字符串特征:
特殊字符 | 快速描述 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
. | 匹配任意字符(不含换行,需re.DOTALL 标记时也匹配换行) |
[^...] | 排除字符匹配 |
\d | 匹配数字 |
\W | 匹配非数字字符 |
\b | 匹配单词边界 |
(?) | 括号表示组或特殊模式 |
6. 示例与应用
6.1 字符匹配
python
:
import re if re.match(r'python', 'python123'): print("匹配成功)
6.2 字符类匹配
- 背括号表达式:
if re.match(r'([Jj])ava', 'JAVA'): print("匹配成功")
6.3 综合匹配
- 完全匹配:
pattern = r'^\d{3}-\d{2}-\d{4}$'num = '123-45-6789'if re.fullmatch(pattern, num): print("电话号码格式正确")
7. 高级应用
通过正则表达式可以实现多种复杂操作,如日期格式验证、HTML标签提取、文本替换等,这些功能使其成为开发中不可或缺的工具。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月18日 11时59分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Error:scalac: bad option: '-make:transitive'
2019-03-14
微软xp壁纸rgb
2019-03-14
浏览器刷新页面
2019-03-14
代码错误信息,微信报错
2019-03-14
easyui日期处理(开始时间和结束时间)
2019-03-14
java文件上传
2019-03-14
Callable中call方法和Runnable中run方法的区别
2019-03-14
【蓝桥杯】 java 大学c组 省赛 1、隔行变色
2019-03-14
超市账单管理系统
2019-03-14
Springboot实现热部署
2019-03-14
composer 介绍、安装及基本使用方法
2019-03-14
需求分析
2019-03-14
查找单链表中倒数第k个节点
2019-03-14
linux中rm和rmdir的区别
2019-03-14
面试高频 C++ 知识总结
2019-03-14
小易的升级之路,找出字符串中第一个只出现一次的字符
2019-03-14
创建组出现错误:对COM组件的调用返回了错误 HRESULT E_FAIL。小敏
2019-03-14
数组去重的常用的几种方法
2019-03-14
Linux yum提示Loaded plugins错误的解决方法
2019-03-14