python正则表达式(8)--分组、后向引用、前(后)向断言
无名、有名分组
(1)正则表达式—无名分组
从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推。
需要注意的是,有一个隐含的全局分组(就是索引号为0的分组),就是整个正则 表达式匹配的结果
(2)正则表达式—有名分组
命名分组就是给具体有默认分组编号的组另外再起一个别名,方便以后的引用。 命令分组的语法格式如下: (?P<name>正则表达式)
语法格式中的字符P必须是大写的“P”,name是一个合法的标识符,表示分组的别名。
s = "ip='230.192.168.78',version='1.0.0'"
res = re.search(r"ip='(?P<ip>\d+\.\d+\.\d+\.\d+).*", s)
print res.group('ip')#通过命名分组引用分组
正则表达式—后向引用
当用“()”定义了一个正则表达式分组后,正则引擎就会把匹配的组按照顺序进行编号,然后存 入缓存中。这样我们就可以在后面对已经匹配过的内容进行引用,这就叫后向引用。
(1)通过索引引用
\数字 \1表示引用第一个分组,\2引用第二个分组,以此类推,\n引用第n个组,而\0则表示引用整个 被匹配的正则表达式本身。
交换字符串的位置
import re
s = 'abc.xyz' # 交换.号两边的字符串
res = re.sub(r'(.*)\.(.*)', r'\2.\1', s)
print res
>>>xyz.abc
(2) (?P=name)通过命名分组名进行引用
(?P=name) 字符P必须是大写的P,name表示命名分组的分组名
(?P<name>)(?P=name) 引用分组的值匹配值必须与第一个分组匹配值相等才能匹配到
例如:
1) 引用前一个分组,前后值相同都是2,故能匹配到
>>> re.match(r'(?P<xst>\d)(?P=xst)','22').groups()
('2',)
>>> re.match(r'(?P<xst>\d)(?P=xst)','22').group()
'22'
2) 引用前一个分组,前后值不相同分别为2和3,故不能匹配到
>>> re.match(r'(?P<xst>\d)(?P=xst)','23').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
正则表达式—前后向断言
(1)前向肯定断言与后向肯定断言
1) 前向肯定断言的语法:
(?<=pattern) 前向肯定断言表示你希望匹配的字符串前面是pattern匹配的内容时,才匹配。
2) 后向肯定断言的语法:
(?=pattern) 后向肯定断言表示你希望匹配的字符串的后面是pattern匹配的内容时,才匹配
3)前后向断言同时使用
如果在一次匹配过程中,需要同时用到前向肯定断言和后向肯定断 言时,那你必须将前向肯定断言表达式写在要匹配的正则表达式的前面,而后向肯定断言表 达式写在你要匹配的字符串的后面
(2) 前向否定断言与后向否定断言
1) 前向否定断言的语法:
(?<!pattern) 前向否定断言表示你希望匹配的字符串的前面不是pattern匹配的内容时,才匹配.
2) 后向否定断言的语法:
(?!pattern) 后向否定断言表示你希望匹配的字符串后面不是pattern匹配的内容时,才匹配。
(3)注意
前向肯定(否定)断言括号中的正则表达式必须是能确定长度的正则表达式,比如\w{3},而不能写成 \w*或者\w+或者\w?等这种不能确定个数的正则模式符。
python正则表达式(8)--分组、后向引用、前(后)向断言的更多相关文章
- Python 正则表达式(分组)
正则表达式分组 分组就是用一对圆括号"()"括起来的正则表达式,匹配出的内容就表示一个分组.从正则表达式的左边开始看,看到的第一个左括号"("表示第一个分组,第 ...
- JavaScript正则表达式之分组匹配 / 反向引用
语法 元字符:(pattern) 作用:用于反复匹配的分组 属性$1~$9 如果它(们)存在,用于得到对应分组中匹配到的子串 \1或$1 用于匹配第一个分组中的内容 \2或$2 用于匹配第一个分组中的 ...
- $python正则表达式系列(4)——分组和后向引用
分组,即分组匹配,也称为捕获组,是正则中的一种比较重要的匹配方式.此外后向引用和分组相结合,可以写出很多复杂匹配场景的正则. 1. 分组 分组的方法:将子表达式用小括号括起来,如:(exp),表示匹配 ...
- python 之re模块(正则表达式) 分组、断言详解
正则表达式分组.断言详解 提示:阅读本文需要有一定的正则表达式基础. 正则表达式中的断言,作为高级应用出现,倒不是因为它有多难,而是概念比较抽象,不容易理解而已,今天就让小菜通俗的讲解一下. 如果 ...
- python正则表达式--特殊字符
正则表达式—特殊表达式含义 正则表达式的字母和数字表示他们自身,但多数字母和数字前加一个反斜杠时会拥有不同的含义. 下面列出了正则表达式模式语法中的特殊元素. 1.普通字符集 1) \w ...
- python正则表达式(1)--特殊字符
正则表达式—特殊表达式含义 正则表达式的字母和数字表示他们自身,但多数字母和数字前加一个反斜杠时会拥有不同的含义. 下面列出了正则表达式模式语法中的特殊元素. 1.普通字符集 1) \w ...
- python正则表达式--分组、后向引用、前(后)向断言
无名.有名分组 (1)正则表达式—无名分组 从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推. 需要注意的是,有一个隐含的全局分组(就是索引号为 ...
- Python爬虫学习(4): python中re模块中的向后引用以及零宽断言
使用小括号的时候,还有很多特定用途的语法.下面列出了最常用的一些: 表4.常用分组语法 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>e ...
- 第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用
一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>介绍了组匹配模式,在一个正则表达式内可以定义多个组,每个组都有一个顺 ...
随机推荐
- WebGPU学习(七):学习“twoCubes”和“instancedCube”示例
大家好,本文学习Chrome->webgpu-samplers->twoCubes和instancedCube示例. 这两个示例都与"rotatingCube"示例差不 ...
- 【计算机视觉】stitching_detail算法介绍
已经不负责图像拼接相关工作,有技术问题请自己解决,谢谢. 一.stitching_detail程序运行流程 1.命令行调用程序,输入源图像以及程序的参数 2.特征点检测,判断是使用surf还是orb, ...
- 【剑指offer】剪绳子
题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能 ...
- Java并发编程基础-Unsafe
前言:Unsafe是Java中一个底层类,包含了很多基础的操作,比如数组操作.对象操作.内存操作.CAS操作.线程(park)操作.栅栏(Fence)操作,JUC包.一些三方框架都使用Unsafe类来 ...
- 【题解】Luogu P5301 [GXOI/GZOI2019]宝牌一大堆
原题传送门 首先先要学会麻将,然后会发现就是一个暴力dp,分三种情况考虑: 1.非七对子国士无双,设\(dp_{i,j,k,a,b}\)表示看到了第\(i\)种牌,一共有\(j\)个\(i-1\)开头 ...
- 300iq Contest 1 简要题解
300iq Contest 1 简要题解 咕咕咕 codeforces A. Angle Beats description 有一张\(n\times m\)的方阵,每个位置上标有*,+,.中的一种. ...
- 使用git svn clone迁移svn仓库(保留提交记录)
使用git svn clone迁移svn仓库 clone命令可以指定很多参数,主要用到这些,你也可以使用git svn help查看完整的参数列表. git svn clone https://172 ...
- How to signout from an Azure Application?(转载)
问: I have created a Azure AD application and a Web App. The Azure AD Application uses AAD Authentica ...
- 1.0EnterpriseFrameWork 框架学习
1.先报其主页 :博主的框架是开源的 http://www.cnblogs.com/kakake/p/3938262.html . 2.学习的精髓是:该框架支持 ORM.SQL语句 和 存储过程 ,O ...
- 使用HttpClient访问接口(Rest接口和普通接口)
这里总结一下使用HttpClient访问外部接口的用法.后期如果发现有什么缺陷会更改.欢迎读者指出此方法的不足之处. 首先,创建一个返回实体: public class HttpResult { // ...