Python正则表达式快速学习
正则表达式(regular expression),简称regex或者re,表示高级文本模式匹配,是文本处理重要的方式,常用来进行字符串的检索、替换等。最开始在unix文本编辑器中使用,现在几乎各种高级编程语言都支持正则表达式。
在python中,可以使用内置模块re来使用正则表达式。
正则表达式的常用符号
匹配单个字符
匹配多个字符
其他匹配
re模块使用
python 的 re 模块提供了很多匹配方法,可以根据不同场景实现字符串的正则提取。
函数 |
描述 |
返回值 |
---|---|---|
match(pattern, string, flags=0) |
使用带有可选标记的正则表达式模式匹配字符串 |
匹配成功,返回匹配对象;如果失败,返回None |
search(pattern, string, flags=0) |
使用可选标记搜索字符串中第一次出现的正则表达式模式 |
匹配成功,返回匹配对象;如果失败,返回None |
findall(pattern, string[, flags]) |
查找字符串中所有(非重复)出现的正则表达式模式 |
匹配列表 |
finditer(pattern, string[, flags]) |
与findall相同,但返回的不是列表 |
一个迭代器 |
split(pattern, string,max=0 ) |
根据正则表达式的模式分隔符,split函数将字符串分割为列表,然后返回成功匹配的列表,分割最多操作max次,默认分割所有匹配成功的位置 |
分割后的列表 |
sub(pattern, repl, string, count=0) |
使用repl替换count次正则表达式的模式在字符串中出现的位置;默认替换所有 |
替换操作数目 |
purge() |
清除隐式编译的正则表达式模式;清除缓存 |
1.match 从字符串的第一个字符开始匹配,如果未匹配到返回None,匹配到则返回一个对象
a = 'A83C72D1D8E67'
r = re.match('A83',a)
print(r) #返回对象所在位置
print(r.group()) #使用group方法来提取数据
print(r.span())# 返回一个元组表示匹配位置(开始,结束)
输出
<re.Match object; span=(0, 3), match='A83'>
A83
(0, 3)
2.re.compile是将正则表达式转换为模式对象,提升匹配效率。使用compile转换一次之后,以后每次使用模式时就不用进行转换。
compile(pattern, flags=0)
pattern:写正则表达式
flags:匹配模式
可以看出返回的是一个匹配对象,它单独使用就没有任何意义,需要和findall(), search(), match()搭配使用。
res = re.compile('w+')
res2 = res.search('*##abcd123_ABC####123').group()#Search与match类似,只是搜索整个字符串然后第一个匹配到指定的字符则返回值,未匹配到则返回None。
print(res2)
输出
abcd123_ABC
3.findall是匹配出字符串中所有跟指定值有关的值,并且以列表的形式返回,未匹配到则返回一个空的列表。
res = re.findall('ab+','abcdabddac')
print(res)
输出
['ab', 'ab']
4.re.split(pattern, string[, maxsplit=0, flags=0]):根据匹配进行切割字符串,并返回一个列表。
res = re.split('W','123#abc#')
print(res)
输出
['123', 'abc', '']
5.字符串替换re.sub
import re
a = 'abcABC'
r = re.sub('abc','ABC',a)
print(r)
贪婪与非贪婪
Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;
非贪婪操作符“?”,用在"*","+","?"的后面,要求正则匹配的越少越好。
res = re.findall('(p.+)','pythonpythonpython')
print(res)
输出
['pythonpythonpython']
res = re.findall('(p.+?)','pythonpythonpython')
print(res)
输出
['py', 'py', 'py']
正则匹配总写一个r是什么意思?
Python中字符串前面加上r,r表示raw的简及raw string意思是原生字符,也就是说是这个字符串中间的特殊字符不用转义。比如你要表示‘n’,可以这样:
r'n'
大家需要注意,正则表达式不需要刻意记住,常用的正则表达式,可以到网上搜索获取,当然,一般优先考虑使用内置方法实现匹配,然后再考虑正则。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php strtoupper 和 array_change_key_case 字符串转大写,小写
- php register_shutdown_function响应error 配合error_get_last 捕获错误
- C# 实现Winform全屏后不遮挡任务栏,显示任务栏
- [TP5填坑]关于助手函数input一不小心取不到get值的解决办法
- 关于nginx为站点绑定域名以及绑定多个域名
- PBMC or 全血,应该选哪个?
- 关于thinkphp5的报错 "mkdir() Permission denied"的解决
- 不同步节点在线使用Remix开发以太坊Dapp及solidity学习入门 ( 一 ):智能合约HelloWorld
- solidity编写eth智能合约之contract 创建合约(二)
- solidity modifier函数修改器 智能合约开发知识浅学(三)
- solidity struct 结构体创建与使用浅学 (四)
- solidity bytes 智能合约开发知识浅学(五点一)bytes基本概念
- Web程序员的Mysql进阶序二之sql多条数据插入、多条数据更新、多表同时查询
- Web程序员的Mysql进阶序三之sql多表数据删除、子查询、联合查询
- nginx 修改配置文件使之支持pathinfo,且隐藏index.php