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?等这种不能确定个数的正则模式符。

原文地址:https://www.cnblogs.com/zeke-python-road/p/9597655.html

时间: 2024-10-09 12:49:06

python正则表达式(8)--分组、后向引用、前(后)向断言的相关文章

正则表达式忽略分组顺序匹配(前瞻、后顾、负前瞻、负后顾的应用)

前瞻: ^ab(?=cd)$   匹配后面带有cd的ab,如果提取出来只有ab 例:  abcd-匹配   abef-不匹配 后顾: ^(?<=ab)cd$  匹配前面带有ab的cd,如果提取出来只有cd 例: abcd-匹配     efcd-不匹配 负前瞻: ^ab(?!cd)$  匹配后面不带cd的ab 例: abcd-不匹配   abef-匹配 负后顾: ^(?<!ab)cd$  匹配前面不带ab的cd 例: abcd-不匹配   efcd-匹配 应用 理解: "[0-9a-

正则表达式之我见—后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理. 默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推. 后向引用用于重复搜索前面某个分组匹配的文本. 分类 代码/语法 说明 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) (?:ex

正则表达式中圆括号的用法--也叫后向引用

所谓后向引用:一个正则表达式使用了圆括号()导致相关匹配将存储到一个临时缓冲区中,可以使用'\n'来访问其中的缓冲区,其中n为一个标识特定缓冲区的一位或两位十进制数,表达式中有过对()缓冲区将会有多个结果当然可以使用非捕获元字符 ?: , ?=  , ?! 来忽略对相关匹配的保存 问题: 如果不忽略这种缓冲区保存会有什么影响,什么时候要忽略保存? 答:正则表达式() 的用法,叫后向引用,也叫反向引用,就是将正则表达式的匹配结果临时存储起来,供以后调用  例1: var num = "1234 5

python正则表达式详解

python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的.下面,我来介绍一下python中的正则表达式是怎么使用的. 首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用

python正则表达式

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.<html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法

Python正则表达式指南

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.< [原文链接]http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表

python正则表达式手记

----------re模块进行正则的使用---------- #result=re.match(正则表达式,要匹配的字符串):使用正则对字符串进行过滤从前面开始匹配#result.group():将获得到的数据取出#result=re.search(正则表达式,要匹配的字符串):使用正则对字符串进行过滤从后面开始匹配#result==None:判断正则表达式是否获取到内容,如果为True,则没有获取到内容#re.search(r'\d+','my hight 177 cm').group():

Python正则表达式指南(转)

1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分.如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了. 下图展示了使用正则表达式进行匹配的流程:  正则表达式的大

python正则表达式教程

原文这里,非常实用,转载一下 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.<html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串