- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
python专题——正则表达式
正则表达式
正则表达式(Regular Expression)是一种文本模式,包括普通字符和特殊字符。
正则表达式使用单个字符串来描述、匹配一系列某个句法规则的字符串。
简介
为什么使用正则表达式
测试字符串内的模式
替换文本
基于模式匹配从字符串中提取子字符串
语法
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某些子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
普通字符
普通字符包括没有显示指定为元字符(特殊字符和符号)的所有可打印和不可打印字符,这包括所有大写和小写字母、所有数字、所有标点符号和一些其他字符。
非打印字符
特殊字符
所谓特殊字符,就是一些含有特殊含义的字符。许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使用字符“转义”,即,将反斜杠“\”放在它们前面。
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
“*”匹配前面的子表达式零次或多次,例如/zo*/,匹配“*”前的字符“o”零次或多次,匹配“z”时匹配了“*”前的子表达式“o”是零次。
*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上?就可以实现非贪婪或最小匹配。例如:H1Chapter 1 - 介绍正则表达式/H1
贪婪模式:
下面的表达式匹配从开始小于符号 () 到关闭 H1 标记的大于符号 () 之间的所有内容。/.*/ ,贪婪模式匹配结果:H1Chapter 1 - 介绍正则表达式/H1
非贪婪:
如果您只需要匹配开始和介绍 H1 标记,下面的非贪婪表达式只匹配 H1。
/.*?/,非贪婪只会匹配:H1
定位符
定位符能够将正则表达式固定到行首或行尾。
注意:
不能讲限定符与定位点一起使用。不允许诸如^*之类的表达式。
若要匹配一行文本开始处的文本,在正则表达式的开始使用^字符。
若要匹配一行文本的结束处的文本,在正则表达式的结束处使用$字符。
例如:
/^Chapter [1-9][0-9]{0,1}$/
字边界是单词和空格之间的位置。非字边界是任何其他位置。下面的表达式匹配单词Chapter的开头三个字符,因为这三个字符出现在字边界的后面:
/\bCha/
\b字符的位置是非常重要的。如果它位于匹配字符串的开始,它在单词开始处查找匹配项。如果位于字符串的结尾,他在单词的结尾处查找匹配项。
\ter/b\
下面的表达式匹配Chapter中的字符串apt,但不匹配aptitude中的字符串apt:
/\Bapt/
选择
用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。
其中 ?: 是非捕获元之一,还有两个非捕获元是 ?= 和 ?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
反向引用
对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用?\n访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
可以使用非捕获元字符??:、?=?或??!?来重写捕获,忽略对相关匹配的保存。
例如:
var str = Is is the cost of of gasoline going up up;
var patt1 = /\b([a-z]+) \1\b/;
document.write(str.match(patt1));
捕获的表达式,正如 [a-z]+ 指定的,包括一个或多个字母。正则表达式的第二部分是对以前捕获的子匹配项的引用,即,单词的第二个匹配项正好由括号表达式匹配。\1 指定第一个子匹配项。
字边界元字符确保只检测整个单词。否则,诸如 is issued 或 this is 之类的词组将不能正确地被此表达式识别。
正则表达式后面的全局标记 g 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。
表达式的结尾处的不区分大小写 i 标记指定不区分大小写。
多行标记指定换行符的两边可能出现潜在的匹配。
组
(?Pname) ?P代表的是Python的语法扩展,name代表自定义命名,...代表命名的语法规则。比如:(?Pnum\d+),命名之后可以在后面调用。比如:re.findall(r(?Pnum\d+)\[a-z]+(?P=num),s) # 找出中间夹有字母
文档评论(0)