栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python基础系列讲解——详解正则表达式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python基础系列讲解——详解正则表达式

正则表达式(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 进阶量化交易》专栏!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号