Python正则表达式分组概念与用法详解

正则表达式分组概念与用法详解

更新之时, 是二零一七年六月二十四日, 上午九点四十四分五十七岁秒, 作者乃世界看我我看世界。

这篇文章着重对正则表达式分组概念以及用法予以介绍, 以结合具体实例的形式, 相对较为详细地剖析了正则表达式里分组、引用、断言等概念以及相关使用技巧, 有需要的朋友能够参考一下。

该篇文章的实例, 将正则表达式分组的概念以及应用方法做了讲解, 把这些内容分享出来, 给众人当作参考, 具体的情况是这样的:

正则表达式分组

分组乃是借助一对圆括号"()"括起来的正则表达式, 匹配所得的内容便意味着一个分组。自正则表达式的左边起始观看, 所瞧见的首个左括号"("代表第一个分组, 第二个代表第二个分组, 依此类推。需留意, 存在一个隐含的全局分组(即0), 也就是整个正则表达式。

分组完成之后, 若想得到某一个分组的内容状况, 径直使用具有特定(num)和()情况的函数采用直接提取获取, 那样即可达成。

例如:提取代码中的超链接中的文本

brush:py; 复制代码
>>> s='

dfsl

' >>> print re.search(r'(.*)',s).group(1) 更多

或者

brush:py; 复制代码
>>> print re.match(r'.*(.*)',s).group(1)
更多
(.*)',s).group(1)
更多

在依照上面的分组进行匹配而后, 我们能够获取到我们期望获取的字串, 然而要是我们正则表达式里括号数量较多, 那么当我们去获取我们想要的字串之际, 就得逐个数我们想要的字串是从第几个括号开始的, 这样子会非常麻烦, 就在这个时候又引入了另外一种分组, 也就是命名分组,上面所讲的那种叫做无名分组。

命名分组

将具有默认分组编号的组, 另外赋予一个别名, 这就是命名分组。而命名分组的语法格式是这样的:

brush:py; 复制代码
(?P正则表达式)#name是一个合法的标识符
正则表达式)#name是一个合法的标识符

如:提取字符串中的ip地址

brush:py; 复制代码
>>> s = "ip='230.192.168.78',version='1.0.0'"
>>> re.search(r"ip='(?P\d+\.\d+\.\d+\.\d+).*", s)
>>> res.group('ip')#通过命名分组引用分组
'230.192.168.78'
\d+\.\d+\.\d+\.\d+).*", s)
>>> res.group('ip')#通过命名分组引用分组
'230.192.168.78'

后向引用

正则表达式里头, 处于圆括号也就是"()"当中的, 意味着是一个组。接着, 你能够针对整个组开展一些正则处理操作, 比如说那重复操作符这些。

需要留意的是, 唯有圆括号"()"能够用以构成组, ""被用来定义字符集, "{}"用于定义重复操作。

要是用那"()"去定义了一个正则表达式组之后, 正则引擎便会将那被匹配的组依照顺序编号, 存进缓存之中。如此一来, 当我们想着在后面针对已经匹配过的内容作出引用的时候, 就能够借助"\数字"这种方式, 或者是经由命名分组采用"(?P=name)"来进行引用。\1意味着引用第一个分组, \2引用第二个分组, 依此类推, \n引用第n个组。而\0引用的是整个被匹配的正则表达式自身。这些引用统统都得是在正则表达式里面才会有效, 是用来匹配一些重复的字符串的。

如:

brush:py; 复制代码
#通过命名分组进行后向引用
>>> re.search(r'(?Pgo)\s+(?P=name)\s+(?P=name)', 'go go go').group('name')
'go'
#通过默认分组编号进行后向引用
>>> re.search(r'(go)\s+\1\s+\1', 'go go go').group()
'go go go'
go)\s+(?P=name)\s+(?P=name)', 'go go go').group('name')
'go'
#通过默认分组编号进行后向引用
>>> re.search(r'(go)\s+\1\s+\1', 'go go go').group()
'go go go'

交换字符串的位置

brush:py; 复制代码
>>> s = 'abc.xyz'
>>> re.sub(r'(.*)\.(.*)', r'\2.\1', s)
'xyz.abc'

前向肯定断言、后向肯定断言

前向肯定断言的语法:

(?=)

后向肯定断言的语法:

特别说明一下, 在此处, 再次给各位提供两款极为便利的正则表达式工具, 以供各位进行参考, 进而使用。

正则表达式在线测试工具:

正则表达式在线生成工具:

可查看本站专题"《正则表达式用法总结》"了解更多相关内容, 也可查看"《数据结构与算法教程》", 还能查看"《函数使用技巧总结》", 以及"《字符串操作技巧汇总》", 还有"《入门与进阶经典教程》", 另外可查看"《文件与目录操作技巧汇总》"。

希望本文所述对大家程序设计有所帮助。

相关推荐
♛小小小让让2 个月前
postman写断言(assert)
postman·断言
弹简特4 个月前
【精通Postman接口测试】03-结果断言实战 + 数据驱动保姆级教程
测试工具·接口测试·postman·断言
安全二次方security²7 个月前
CUDA C++编程指南(7.31&32&33&34)——C++语言扩展之性能分析计数器函数和断言、陷阱、断点函数
c++·人工智能·nvidia·cuda·断点·断言·性能分析计数器函数
Java牛马1 年前
SpringCloud之Gateway
网关·spring cloud·gateway·路由·过滤器·断言
长路 ㅤ   1 年前
Java单元测试JUnit
junit·单元测试·springboot·注解·断言
Pandaconda1 年前
【新人系列】Golang 入门(十五):类型断言
开发语言·后端·面试·golang·go·断言·类型
cyt涛2 年前
SpringCloudGateway — 网关路由
java·开发语言·网关·gateway·路由·断言·转发
Mr_Chenph2 年前
Jmeter实际应用
jmeter·断言·tps·jmeter插件
王彬泽2 年前
【微服务】网关 - Gateway(day7)
微服务·gateway·过滤·断言