python系列之re模块(正则表达式)
来源:互联网 发布:瑞尔森大学怎么样知乎 编辑:程序博客网 时间:2024/05/16 03:23
一、正则表达式
正则表达式的优势:简洁
两个例子:
正则表达式是用来简洁表达一组字符串的表达式;
正则表达式是一种通用的字符串表达框架;
正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具;
正则表达式可以用来判断某字符串的特征归属。
正则表达式的应用:
二、正则表达式的语法
正则表达式语法由字符和操作符构成。
在下面的经典实例中,“正整数形式的字符串”开头可能是 0,觉得开头不能为 0,不过它应该是把 01 与 1 视为等价的,这样想的话是没问题的。不过,我自己更倾向于写成:”^[1-9][0-9]*$”或者”^[1-9]\d*$”
下图 IP 地址正则表达式中,前两种都不是精确匹配。
三、Re 库的基本使用
Re库是Python的标准库,主要用于字符串匹配。
调用方式:import re
各函数举例说明:
1) re.search() :
【注】正则表达式中的 ‘.’ 操作符能够匹配所有字符,但不包括换行符,即默认匹配除换行外的所有字符;利用 ‘re.S’ 就可以匹配包括换行符在内的所有字符。
代码实例:
import rematch_obj = re.search(r'[1-9]\d{5}', 'BIT 100081')if match_obj: print(match_obj.group(0))"""结果如下:100081"""
2) re.match() :
代码实例:
import rematch_obj= re.match(r'[1-9]\d{5}', 'BIT 100081')if match_obj: print(match_obj.group(0))else: print('None')"""结果如下:None"""
在上面的代码中,由于 re.match() 函数是从字符串的首位开始匹配,而”BIT 100081”中首位并不是数字,不能匹配,因此此时 match_obj 为空(一个空的 match 对象)。
将”BIT 100081”改成”100081 BIT”就能匹配,代码如下:
import rematch_obj = re.match(r'[1-9]\d{5}', '100081 BIT')if match_obj: print(match_obj.group(0))else: print('None')"""结果如下:100081"""
3) re.findall() :
代码实例:
import rels = re.findall(r'[1-9]\d{5}', 'BIT100081 TSU100084')print(ls)"""结果如下:['100081', '100084']"""
4) re.split() :
代码实例:
import rels_1 = re.split(r'[1-9]\d{5}', 'BIT100081 TSU100084')print(ls_1)ls_2 = re.split(r'[1-9]\d{5}', 'BIT100081 TSU100084', maxsplit = 1)print(ls_2)"""结果如下:['BIT', ' TSU', ''] # 注意最后一个是空字符串,不是空格['BIT', ' TSU100084']"""
5) re.finditer() :
import refor m in re.finditer(r'[1-9]\d{5}', 'BIT100081 TSU100084'): if m: print(m.group(0))"""结果如下:100081100084"""
6) re.sub() :
import rels = re.sub(r'[1-9]\d{5}', '123', 'BIT100081 TSU100084')print(ls)"""结果如下:BIT123 TSU123"""
Re 库的另一种等价用法:
下面的函数与上面的函数功能一一对应,但是用法略有不同,下面的函数不需要“正则表达式的字符串或原声字符串表示”这个参数。
四、Match 对象
Match对象是一次匹配的结果,包含匹配的很多信息。
从下面的代码可以看出 Match 对象的类型:
import rematch = re.search(r'[1‐9]\d{5}', 'BIT 100081')if match: print(match.group(0)) print(type(match))"""结果如下:100081<class '_sre.SRE_Match'>"""
import rem = re.search(r'[1‐9]\d{5}', 'BIT100081 TSU100084')print(m.string)print(m.re)print(m.pos, m.endpos)print(m.group(0))print(m.start(), m.end())print(m.span())"""结果如下:BIT100081 TSU100084re.compile('[1‐9]\\d{5}')0 191000813 9(3, 9)"""
五、Re 库的贪婪匹配和最小匹配
Re库默认采用贪婪匹配,即输出匹配最长的子串。
代码实例:
import rematch = re.search(r'PY.*N', 'PYANBNCNDN')print(match.group(0))"""结果如下:PYANBNCNDN"""
最小匹配:
如何输出最短的子串呢?在后面加个“?”即可。
import rematch = re.search(r'PY.*?N', 'PYANBNCNDN')print(match.group(0))"""结果如下:PYAN"""
【参考】北京理工大学网络公开课《Python网络爬虫与信息提取》
- python系列之re模块(正则表达式)
- Python爬虫正则表达式和re模块系列之七
- Python之re(正则表达式)模块小结
- Python 之 re模块 正则表达式
- python模块之re正则表达式
- python模块之re正则表达式
- python正则表达式:re模块
- Python 正则表达式 re模块
- Python 正则表达式,re模块
- Python re模块正则表达式
- Python正则表达式re模块
- Python正则表达式,re模块
- python 正则表达式 re模块
- Python 正则表达式 re模块
- python---re模块,正则表达式
- python正则表达式模块re
- Python正则表达式re模块
- Python全栈之路系列之正则表达式re模块
- STM8学习笔记二----CCO输出
- 暑假集训日记--8.22--树状数组+练习赛
- dll回调给java的函数参数需要有字节数组类型参数的处理
- ionic 调用自定义cordova插件
- python socket的select,poll,epoll
- python系列之re模块(正则表达式)
- hdu 6153 A Secret【KMP/想法题】
- 影梭客户端原理剖析
- Java进阶之路【代码篇】——《CleanCode》编程规则精编(10) 并发
- HTTP协议详解
- centos7初使用
- Yet Another Median Task Gym
- SEO
- Clean Code 代码整洁之道