python 正则表达式
正则表达式是用来简洁表达一组字符串地表达式,是通用的字符串表达框架
正则表达式由字符和操作符组成:
操作符 | 说明 |
. | 表示任何单个字符(除了换行) |
[ ] | 字符集,对单个字符给出取值范围,[abc]表示a、b、c中任一个,[a-z]表示a到z的单个字符 |
[^] | 非字符集,对单个字符给出排除范围,[^abc]表示除了a、b、c之外的的单个字符 |
* | 前一个字符0次或多次扩展 abc* 表示:ab、abc 、abc 、abcccc等 |
+ | 前一个字符1次或多次扩展 |
? | 前一个字符0次或者1次扩展 |
| | 左右表达式任意一个 abc|def 表示abc 或者def |
{m} | 扩展前一个字符m次 |
{m,n} | 扩展前面的一个字符m至n次(含n) |
^ | 匹配字符串开头 ^abc表示一个字符串的开头为abc |
$ | 匹配字符串结尾 abc$ 表示一个字符串的结尾为abc |
( ) | 分组标记,内部只能使用|操作符 (abc)表示abc ,(abc|def) 表示abc或者def |
\d | 十进制数字 ,介于[0-9] |
\D | 匹配任何非数据字符,等价于[^0-9] |
\s | 匹配任何空白字符;等价于[\f\n\r\t\v] |
\S | 匹配任何非空白字符 |
\w | 单词字符,等价于[A-Za-z0-9 _ ]增加 A-Z,a-z,0-9和下划线_ |
\W | 匹配任何非单词字符 |
\b | 匹配单词的开始或结束 |
\B | 匹配不是单词的开头或者结束的位置 |
\1…\9 | 匹配第n个分组的内容。 分组是() |
{:n} | 拓展一个字符0-n次,包含n |
^[A-Za-z]+$ 由26个字母组成的字符串 ^[A-Za-z0-9]+$ 由26个字母和数字组成的字符串
re库
标准库,用于字符串匹配
re库采用raw string 类型表示正则表达式,格式: r’text’
raw string 类型是原生字符串类型,不包含转义符的字符串
re库主要功能函数
- re.search()
在一个字符串中搜索匹配的正则表达式的第一个位置,返回match对象
- re.match()
从一个字符串的开始位置起匹配正则表达式,返回match对象
- re.findall()
搜索字符串,以列表类型返回全部能匹配的子串
- re.split()
将一个字符串按照正则表达式匹配的结果进行分隔,返回列表
- re.finditer()
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
- re.sub()
在一个字符串中替换所有匹配的正则表达式的子串,返回替换后的字符串
函数的使用方法
- re.search(pattern,string,flags=0)
pattern: 正则表达式的匹配字符串
string: 待匹配的字符串
flags: 正则表达式使用时的控制标记
常用标记:
缩写 | 全写 | 说明 |
re.I | re.IGNORECASE | 忽略正则表达式的大小写 [A-Z]可以匹配小写 |
re.M | re.MULTILINE | 正则表达式中^操作符能够将给定字符串的每行当作匹配开始 |
re.S | re.DOTALL | 正则表达式中的.操作符能够匹配所有字符。默认.操作符匹配除换行符外的所有字符 |
- re.match(pattern,string,flags=0)
- re.findall(pattern,string,flags=0)
返回列表类型 - re.split(pattern,string,maxsplit=0,flags=0)
maxsplit:最大分割数,剩余部分作为最后一个元素输出
将匹配的部分会去掉,其他的部分作为分隔的部分 - re.finditer(pattern,string,flags=0)
- re.sub(pattern,replace,string,count=0;flags=0)
replace:替换匹配字符串的字符串
count: 匹配的最大替换次数
re库的使用
函数式用法
一次性操作
rst.re.search(r’[1-9]\d{5}’,“BIT 100081”)
面向对象用法
编译后的多次操作
pat=re.compile(r’[1-9]\d{5}’) 编译
rst=pat.search(“BIT 100081”)
regex=re.compile(pattern,flags=0) 将正则表达式的字符串形式编译成正则表达式对象
re的match对象
match对象的属性
属性 | 说明 |
.string | 待匹配的文本 |
.re | 匹配时使用的pattern对象(正则表达式) |
.pos | 正则表达式搜索文本的开始位置 |
.endpos | 正则表达式搜索文本的结束位置 |
match对象的方法
方法 | 说明 |
.group(n) | 获得匹配后的第n个元素 |
.start() | 匹配字符串在原始字符串的开始位置 |
.end() | 匹配字符串在原始字符串中的结束位置 |
.span() | 返回(.start(),.end()) 元组类型 |
贪婪匹配
re库默认采用贪婪匹配,即输出匹配的最长的子串
r'py.*N'
最小匹配
输出匹配的最小的子串
r'py.*?N'
(加一个问号?)
*? 前一个字符0次或多次,最小匹配
+? 前一个字符1次或多次,最小匹配
?? 前一个字符0次或1次,最小匹配
{m,n}? 扩展前一个字符m至n次(含n),最小匹配
Re在线网站
https://tool.oschina.net/regex?optionGlobl=global
https://c.runoob.com/front-end/854
结果: