正则表达式(Regular expression) 能够有效地实现对复杂字符串的分析并提取出相关信息,Python 的 re 模块提供各种正则表达式的匹配操作,将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。
首先定义需要分析的字符串,如下所示:
f_str = r'Executed Tests
Expand All "
f_str = r'''Executed Tests
Expand All "
打印后显示如下:
Executed Tests
Expand All "
接下来分别详解下正则表达式的使用。
正则表达式使用反斜杠“”来代表特殊形式或用作转义字符,在Python的语法中需要用“ ” 转义正则表达式中的“”,因此每一个“”都需要转义为“”。为了使正则表达式具有更好的可读性,可以用原始字符串(raw string),即用’r’作为字符串的前缀。Python中写正则表达式时推荐使用这种形式。
re.findall(pattern, string[, flags])方法能够以列表的形式返回能匹配的子串。比如以下例子中以列表类型返回字符串中所有匹配的任意非空白字符(S+):
ret = re.findall(r'(S+)', f_str)
打印后显示如下:
[', 'class="small_header">Executed', 'Tests', ', 'class="gray_red_link"', 'href="javascript:expandExecDetails()">Expand', 'All "', ', 'class=']
比如以下例子中可以精确返回'javascript:expandExecDetails()'字符串:
ret = re.findall(r'href.*"(S+)".*Expand', f_str)
打印后显示如下:
['javascript:expandExecDetails()']
re.compile(strPattern[, flag])这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象,实现更有效率的匹配。第二个参数flag是匹配模式,取值可以使用运算符,比如re.I | re.M。另外,可选值有:
re.I(IGNORECASE): 忽略大小写
re.M(MULTILINE): 多行模式,改变’^‘和’$‘的行为
re.S(DOTALL): 在匹配时为点任意匹配模式,改变’.‘的行为,’.'也可以代表换行符
re.L(LOCALE): 使预定字符类 w W b B s S 取决于当前区域设定
re.U(UNICODE): 使预定字符类 w W b B s S d D 取决于unicode定义的字符属性
re.X(VERBOSE): 详细模式。该模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
将以上的例子更改为re.compile方式,如下所示:
regex = re.compile(r'href.*"(S+)".*Expand')
ret = regex.findall(f_str)
Python还提供了两种不同的原始操作:match和search。match是从字符串的起点开始做匹配,只有在开始位置匹配成功时候才返回,否则返回none。search扫描整个字符串查找匹配并返回第一个成功的匹配。两者都提供了group()方法,返回被RE匹配的字符串。
print re.match("class",f_str)
print re.search("class", f_str).group(0)
打印后显示如下:
None
class
附:正则表达式元字符和语法
·······································
欢迎大家订阅《教你用 Python 进阶量化交易》专栏!
Python相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile
热门相关搜索
路由器设置
木托盘
宝塔面板
儿童python教程
心情低落
朋友圈
vim
双一流学科
专升本
我的学校
日记学校
西点培训学校
汽修学校
情书
化妆学校
塔沟武校
异形模板
西南大学排名
最精辟人生短句
6步教你追回被骗的钱
南昌大学排名
清朝十二帝
北京印刷学院排名
北方工业大学排名
北京航空航天大学排名
首都经济贸易大学排名
中国传媒大学排名
首都师范大学排名
中国地质大学(北京)排名
北京信息科技大学排名
中央民族大学排名
北京舞蹈学院排名
北京电影学院排名
中国戏曲学院排名
河北政法职业学院排名
河北经贸大学排名
天津中德应用技术大学排名
天津医学高等专科学校排名
天津美术学院排名
天津音乐学院排名
天津工业大学排名
北京工业大学耿丹学院排名
北京警察学院排名
天津科技大学排名
北京邮电大学(宏福校区)排名
北京网络职业学院排名
北京大学医学部排名
河北科技大学排名
河北地质大学排名
河北体育学院排名



