正则表达式分组概念与用法详解
更新之时, 是二零一七年六月二十四日, 上午九点四十四分五十七岁秒, 作者乃世界看我我看世界。
这篇文章着重对正则表达式分组概念以及用法予以介绍, 以结合具体实例的形式, 相对较为详细地剖析了正则表达式里分组、引用、断言等概念以及相关使用技巧, 有需要的朋友能够参考一下。
该篇文章的实例, 将正则表达式分组的概念以及应用方法做了讲解, 把这些内容分享出来, 给众人当作参考, 具体的情况是这样的:
正则表达式分组
分组乃是借助一对圆括号"()"括起来的正则表达式, 匹配所得的内容便意味着一个分组。自正则表达式的左边起始观看, 所瞧见的首个左括号"("代表第一个分组, 第二个代表第二个分组, 依此类推。需留意, 存在一个隐含的全局分组(即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'
前向肯定断言、后向肯定断言
前向肯定断言的语法:
(?=)
后向肯定断言的语法:
特别说明一下, 在此处, 再次给各位提供两款极为便利的正则表达式工具, 以供各位进行参考, 进而使用。
正则表达式在线测试工具:
正则表达式在线生成工具:
可查看本站专题"《正则表达式用法总结》"了解更多相关内容, 也可查看"《数据结构与算法教程》", 还能查看"《函数使用技巧总结》", 以及"《字符串操作技巧汇总》", 还有"《入门与进阶经典教程》", 另外可查看"《文件与目录操作技巧汇总》"。
希望本文所述对大家程序设计有所帮助。