Python正则表达式re库的初次使用入门
正则表达式常用操作符:
| 操作符 | 说明 | 实例 |
|---|---|---|
| . | 表示任何单个字符,不包括换行符 | |
| [] | 字符集,对单个字符给出取值范围 | [abc]表示a、b、c,[a-z]表示a到z单个字符 |
| [^ ] | 非字符集 | [^abc]表示非a或b或c |
| * | 前一个字符0次或无限次扩展 | abc*表示ab、abc、abcc、abccc、…… |
| + | 前一个字符一次或无限次扩展 | abc+表示abc、abcc、abccc、…… |
| ? | 前一个字符0次或1次扩展 | abc?表示ab、abc |
| | | 左右表达式任意一个 | abc|def表示abc、def |
| {m} | 扩展前一个字符m次 | ab{2}c表示abbc |
| {m,n} | 扩展前一个字符m至n次(含n) | {ab{1,2}c表示abc、abbc |
| ^ | 匹配字符串开头 | ^abc表示abc且在一个字符串的开头 |
| $ | 匹配字符串结尾 | abc$表示abc且在一个字符串的结尾 |
| () | 分组标记,内部只能有|操作符 | (abc)表示abc,(abc |
| \d | 数字 | |
| \w | 单词字符,等价于[A-Za-z0-9] |
import re
常用方法
re库常用方法:
| 函数 | 说明 |
|---|---|
| re.search() | 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 |
| re.match() | 从一个字符串的开始位置起匹配正则表达式,返回match对象 |
| re.findall() | 搜索字符串,以列表类型返回全部能匹配的子串 |
| re.split() | 将字符串按照正则表达式匹配结果进行分割,返回列表类型 |
| re.finditer() | 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 |
| re.sub() | 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
flags:正则表达式使用时的控制标记
| 常用标记 | 说明 |
|---|---|
| re.I re.IGNORECASE | 忽略大小写,[A-Z]可以匹配小写字母 |
| re.M re.MULTILINE | ^操作符能够将给定的字符串每行都当作匹配开始 |
| re.S re.DOTALL | .操作符能够匹配所有字符,包括换行符 |
- re.search(pattern, string, flags=0)
s = "abc 123 abc 456"
match = re.search("\d+", s)
print("match的类型:", type(match))
print("匹配的子串:", match.group(0))
match的类型: <class 're.Match'>
匹配的子串: 123
- re.match(pattern, string, flags=0)
s = "123 abc"
match = re.match("\d+", s)
print("match的类型:", type(match))
print("匹配的子串:", match.group(0))
print("----------------")
s = "abc 123 abc"
match = re.match("\d+", s)
print("match的类型:", type(match))
try:
print("匹配的子串:", match.group(0))
except:
pass
match的类型: <class 're.Match'>
匹配的子串: 123
----------------
match的类型: <class 'NoneType'>
- re.findall(pattern, string, flags=0)
s = "abc 123 456 bcd 23 dsssa12"
match = re.findall("1\d+", s) # 以1开头的数字
match
['123', '12']
- re.finditer(pattern, string, flags=0)
s = "abc 123 456 bcd 23 dsssa12"
match = re.finditer("1\d+", s)
while True:
try:
print(next(match).group(0))
except:
break
123
12
- re.split(pattern, string, maxsplit=0, flags=0)
maxsplit:最大分隔数,将剩余部分作为一个整体当作最后一个元素,默认的0表示最大分隔
s = "abc 123 456 bcd 23 dsssa12"
match1 = re.split("\d{2}", s) #以连续的两个数字作为分隔条件
match2 = re.split("\d{2}", s, maxsplit=2) #以连续的两个数字作为分隔条件
print(match1, match2)
['abc ', '3 ', '6 bcd ', ' dsssa', ''] ['abc ', '3 ', '6 bcd 23 dsssa12']
- re.sub(pattern, repl, string, count=0, flags=0)
repl:将匹配的子串换成该字符串
s = "abc 123 456 bcd 23 dsssa12"
s1 = re.sub("[0-9][^a-z]*", "**", s)
s2 = re.sub("[0-9][^a-z]*", "**", s, count=2)
print(s1, s2, sep='\n')
abc **bcd **dsssa**
abc **bcd **dsssa12
- re.compile(pattern, flags=0)
s = "abc 123 456 bcd 23 dsssa12"
pat = re.compile("\d+")
rst = pat.search(s)
print(rst.group(0))
rst = pat.findall(s)
print(rst)
123
['123', '456', '23', '12']
match对象的属性和方法
s = "sdf 123 asd"
match = re.search("\d+", s)
print(match.string) # 被匹配的文本
print(match.re) # 匹配时使用的pattern对象
print(match.pos) # 从该位置开始搜索的文本
print(match.endpos) # 搜索文本的结束位置
print(match.group(0)) # 一般的正则表达式使用group(0)就可以获得匹配的字符串
print(match.start()) # 匹配的字符串在原字符串中的起始位置
print(match.end()) # 匹配的字符串在原字符串中的结束位置
print(match.span()) # 起始和结束位置的元组
sdf 123 asd
re.compile('\\d+')
0
11
123
4
7
(4, 7)
贪婪匹配和最小匹配
s = "PYANBNCNDN"
match = re.search("PY.*N", s)
print(match.group(0))
PYANBNCNDN
对于代码中的模式串和字符串,正则匹配可以有"PYAN"、"PYANBN"、"PYANBNCN"、"PYANBNCNDN"些个匹配结果。
而上述代码说明re库默认是贪婪匹配,即输出最长的子串。
下面将贪婪模式改成最小模式:
| 操作符 | 说明 |
|---|---|
| *? | 将*扩展为最小匹配 |
| +? | 将+扩展为最小匹配 |
| ?? | 将?扩展为最小匹配 |
| {m,n}? | 将{m,n}扩展为最小匹配 |
当我们发现一个模式串中的每个操作符可匹配不同长度的子串时,我们都可以在该操作符的后面添加?来获得最小匹配。
match = re.search("PY.*?N", s)
print(match.group(0))
PYAN
Python正则表达式re库的初次使用入门的更多相关文章
- python正则表达式re库(自用)
经典例子: 1.由26个字母组成的字符串 ^[A-Za-z]+$ 2. 中国境内邮政编码 [1-9]\d{5} 3.IP地址 0-99:[1-9]?\d 100-199:1\d{2} 200-249: ...
- [转] Python正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- Python 正则表达式学习笔记
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- Python正则表达式指南(转)
目录 Python正则表达式指南(转) 0.防走丢 1. 正则表达式基础 1.1. 简单介绍 1.2. 数量词的贪婪模式与非贪婪模式 1.3. 反斜杠的困扰 1.4. 匹配模式 2. re模块 2.1 ...
- 7.Python 正则表达式学习笔记
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- python正则表达式re模块详细介绍--转载
本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一样漂亮. 正则表达式使用反斜杆( ...
- python正则表达式教程
原文这里,非常实用,转载一下 再来一篇,两篇一起看,美滋滋 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写 ...
- 转:Python正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
随机推荐
- docker部署的nginx非80端口无法访问
请检查nginx容器是否只开启了80端口映射!!! 请检查nginx容器是否只开启了80端口映射!!! 请检查nginx容器是否只开启了80端口映射!!! 如果你访问的端口在nignx容器已经开启了端 ...
- Laravel使用Observer(观察者)
1.创建observer文件,我这里是要记录仓库库存模块的操作日志,所以执行下面的语句,会在app/Observers下面创建WarehouseInventoryObserver文件. php a ...
- buu crypto 变异凯撒
一.由题目就可知是凯撒加密,但是是变异,说明有改动,但是凯撒的本质移位是不变的,将密文afZ_r9VYfScOeO_UL^RWUc,和flag进行比较,字符表查一下,发现 a:97 f:102 f:1 ...
- 让我手把手教你写一个强大、方便使用的 IOC 容器
一.介绍 1.介绍 最近无聊,也没什么事做,没事做总是要给自己找点事情做吧,毕竟人的生活在与折腾.于是,决定自己手动写一个 IOC 的框架.我们知道在 NetCore 的版本里面已经内置了 IOC 容 ...
- 双线性插值算法的FPGA实现
本设计预实现720P到1080P的图像放大,输入是YUV444数据,分量像素位宽为10bit,采用的算法为双线性插值法,开发平台是xiinx K7开发板. 双线性插值法即双次线性插值,首先在横向线性插 ...
- 学习总结 NCRE二级和三级
NCRE二级C语言 证书 考试感想 2016年考的认证,5年过去了,"光阴荏苒真容易".趁着心有余力有余的时候,把一些个人的体会分享给大家,希望后来人能平稳前行. Windows ...
- YARN调度器(Scheduler)详解
理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源.在Yarn中,负责给应用分配资 ...
- POJ1934 Trip 题解
LCS 模板,但要输出具体方案,这就很毒瘤了. 神奇的预处理:fa[i][j]表示在 \(a\) 串的前 \(i\) 个字符中,字母表第 \(j\) 个字母最晚出现的位置,fb[i][j]同理. 这样 ...
- Spring Boot的MyBatis注解:@MapperScan和@Mapper(十七)
1.Spring Boot与MyBatis融合的矛盾问题: Spring家族的使命就是为了简化而生,但是随着Spring的发展壮大,有点事与愿违了.为了坚持初心,Spring家族祭出了一大杀器---S ...
- 【Java基础上】一、简述Java
一.简述Java Java是一种高级的面向对象的程序语言,在此处,不需要了解什么叫做面向对象,因为后面的文章中自然会谈到这方面的论述.那么,Java就是一个计算机的编程语言. 1.1 Java的历 ...