Python正则表达式指南保举
副问题[/!--empirenews.page--]
1.2. 数目词的贪心模式与非贪心模式 1.3. 反斜杠的困扰 1.4. 匹配模式 2. re模块 2.1. 开始行使re 2.2. Match 2.3. Pattern 本文先容了Python对付正则表达式的支持,包罗正则表达式基本以及Python正则表达式尺度库的完备先容及行使示例。本文的内容不包罗怎样编写高效的正则表达式、怎样优化正则表达式,这些主题请查察其他教程。 留意:本文基于Python2.4完成;假如看到不大白的词汇请记得百度谷歌或维基,whatever。 1. 正则表达式基本 1.1. 简朴先容 正则表达式并不是Python的一部门。正则表达式是用于处理赏罚字符串的强盛器材,拥有本身奇异的语法以及一个独立的处理赏罚引擎,服从上也许不如str自带的要领,但成果异常强盛。得益于这一点,在提供了正则表达式的说话里,正则表达式的语法都是一样的,区别只在于差异的编程说话实现支持的语法数目差异;但不消担忧,不被支持的语法凡是是不常用的部门。假如已经在其他说话里行使过正则表达式,只必要简朴看一看就可以上手了。 下图展示了行使正则表达式举办匹配的流程: 正则表达式的大抵匹配进程是:依次拿出表达式和文本中的字符较量,假如每一个字符都能匹配,则匹配乐成;一旦有匹配不乐成的字符则匹配失败。假如表达式中有量词或界线,这个进程会轻微有一些差异,但也是很好领略的,看下图中的示例以及本身多行使屡次就能大白。 下图列出了Python支持的正则表达式元字符和语法: 1.2. 数目词的贪心模式与非贪心模式 正则表达式凡是用于在文本中查找匹配的字符串。Python里数目词默认是贪心的(在少数说话里也也许是默认非贪心),老是实行匹配尽也许多的字符;非贪心的则相反,老是实行匹配尽也许少的字符。譬喻:正则表达式"ab*"假如用于查找"abbbc",将找到"abbb"。而假如行使非贪心的数目词"ab*?",将找到"a"。 1.3. 反斜杠的困扰 与大大都编程说话沟通,正则表达式里行使""作为转义字符,这就也许造成反斜杠困扰。若是你必要匹配文本中的字符"",那么行使编程说话暗示的正则表达式里将必要4个反斜杠"\":前两个和后两个体离用于在编程说话里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地办理了这个题目,这个例子中的正则表达式可以行使r""暗示。同样,匹配一个数字的"d"可以写成r"d"。有了原生字符串,你再也不消担忧是不是漏写了反斜杠,写出来的表达式也更直观。 1.4. 匹配模式 正则表达式提供了一些可用的匹配模式,好比忽略巨细写、多行匹配等,这部门内容将在Pattern类的工场要领re.compile(pattern[, flags])中一路先容。 2. re模块 2.1. 开始行使re Python通过re模块提供对正则表达式的支持。行使re的一样平常步调是先将正则表达式的字符串情势编译为Pattern实例,然后行使Pattern实例处理赏罚文本并得到匹配功效(一个Match实例),最后行使Match实例得到信息,举办其他的操纵。 # encoding: UTF-8 # 将正则表达式编译成Pattern工具 # 行使Pattern匹配文本,得到匹配功效,无法匹配时将返回None if match: ### 输出 ### re.compile(strPattern[, flag]): 这个要领是Pattern类的工场要领,用于将字符串情势的正则表达式编译为Pattern工具。 第二个参数flag是匹配模式,取值可以行使按位或运算符'|'暗示同时见效,好比re.I | re.M。其它,你也可以在regex字符串中指定模式,好比re.compile('pattern', re.I | re.M)与re.compile('(?im)pattern')是等价的。 可选值有: re.I(re.IGNORECASE): 忽略巨细写(括号内是完备写法,下同) M(MULTILINE): 多行模式,改变'^'和'$'的举动(拜见上图) S(DOTALL): 点恣意匹配模式,改变'.'的举动 L(LOCALE): 使预定字符类 w W b B s S 取决于当前地区设定 U(UNICODE): 使预定字符类 w W b B s S d D 取决于unicode界说的字符属性 X(VERBOSE): 具体模式。这个模式下正则表达式可所以多行,忽略空缺字符,并可以插手注释。以下两个正则表达式是等价的: a = re.compile(r"""d + # the integral part re提供了浩瀚模块要领用于完成正则表达式的成果。这些要领可以行使Pattern实例的响应要领更换,独一的甜头是少写一行re.compile()代码,但同时也无法复用编译后的Pattern工具。这些要领将在Pattern类的实例要领部门一路先容。如上面这个例子可以简写为: m = re.match(r'hello', 'hello world!') re模块还提供了一个要领escape(string),用于将string中的正则表达式元字符如*/+?等之前加上转义符再返回,在必要大量匹配元字符时有那么一点用。 2.2. Match Match工具是一次匹配的功效,包括了许多关于此次匹配的信息,可以行使Match提供的可读属性或要领来获取这些信息。 属性: string: 匹配时行使的文本。 re: 匹配时行使的Pattern工具。 pos: 文本中正则表达式开始搜刮的索引。值与Pattern.match()和Pattern.seach()要领的同名参数沟通。 endpos: 文本中正则表达式竣事搜刮的索引。值与Pattern.match()和Pattern.seach()要领的同名参数沟通。 lastindex: 最后一个被捕捉的分组在文本中的索引。假如没有被捕捉的分组,将为None。 lastgroup: 最后一个被捕捉的分组的别名。假如这个分组没有别名可能没有被捕捉的分组,将为None。 要领: group([group1, …]): 得到一个或多个分组截获的字符串;指定多个参数时将以元组情势返回。group1可以行使编号也可以行使别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。 groups([default]): 以元组情势返回所有门组截获的字符串。相等于挪用group(1,2,…last)。default暗示没有截获字符串的组以这个值更换,默以为None。 groupdict([default]): 返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包括在内。default寄义同上。 start([group]): 返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。 end([group]): 返回指定的组截获的子串在string中的竣事索引(子串最后一个字符的索引+1)。group默认值为0。 span([group]): 返回(start(group), end(group))。 expand(template): 将匹配到的分组代入template中然后返回。template中可以行使id或g、g引用分组,但不能行使编号0。id与g是等价的;但10将被以为是第10个分组,假如你想表达1之后是字符'0',只能行使g<1>0。 import re (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |