零宽断言

正则之零宽断言

我们两清 提交于 2020-03-02 04:27:33
1.什么是零宽断言: 零宽断言正如它的名字一样,是一种 零宽度的匹配 . 它匹配到的内容不会保存到匹配结果中去, 最终匹配结果只是一个 位置 而已. 2.何时使用零宽断言: 在使用正则表示式时, 有时, 我们需要捕获的内容前后必须是特定内容, 但又不捕获这些特定内容的时候, 零宽断言就起到作用了 3.如何使用零宽断言: 零宽断言的作用是 给指定位置添加一个限定条件 , 用来规定此位置之前或者之后的字符必须满足限定条件, 才能使正则中的表达式匹配成功. 4.零宽断言分类: (?=exp) 也叫 零宽度正预测先行断言,它断言此位置的 后面能匹配 表达式exp (?!exp) 也叫 零宽度负预测先行断言,断言此位置的 后面不能匹配 表达式exp (?<=exp) 也叫 零宽度正回顾后发断言,它断言此位置的 前面能匹配 表达式exp (?<!exp) 也叫 零宽度负回顾后发断言来断言此位置的 前面不能匹配 表达式exp 5.例子: " ab Cabcab, " /ab( ?=[A-Z])/ 匹配后面跟随任意一个大写字母的字符串”ab”, 最终匹配结果” ab ” (大写字母C前的"ab") /ab( ?![A-Z])/ 匹配后面不跟随任意一个大写字母的字符串”ab”, 最终匹配结果”ab””ab”(小写字母c前的"ab",和",“前面的"ab”) 6.实际应用: 千分符和密码强度 (1

Python 正则表达式急速入门

房东的猫 提交于 2019-12-11 03:12:45
正则表达式在程序开发中会经常用到,比如数据(格式)验证、替换字符内容以及提取字符串内容等等情况都会用到,但是目前许多开发人员对于正则表达式只是处于了解或者是基本会用的阶段。一旦遇到大批量使用正则表达式的情况(例如网络爬虫)可以说基本上就抓瞎了。这篇文章我将带领大家利用 Python 来学习一下正则表达式。在阅读这篇文章前你需要掌握 Python 基础知识,或者具有其他开发语言的基础知识也可以,因为基本上每种语言使用正则表达式的方式都是类似的。 零、正则表达式基础 提取字符(串) 有时我们需要从一个字符串中获取一段内容,这段内容可能是一个字符也可能是一段字符串,如果用逐字对比遍历的话不仅耗时耗力而且还容易出错。那么这个时候我们就可以用到正则表达式中的 字符匹配 功能。正则表达式为我们提供了 4 中字符匹配的方法,见下表: 语法 说明 例子 可匹配字符串 . 匹配除了换行符 “\n” 以外的任意字符 a.b acb、adb、a2b、a~b \ 转义,将转移字符后面的一个字符改变原来的意思 a[b\.\\]c abc、a.c、a\c [] 匹配括号内的任意字符 a[b,c,d,e]f abd、acf、adf、aef [^] 除了括号内的字符外,其他的字符都匹配 a[^a,b,c,d,e]f a1f、a#f、azf、agf 预定义字符

正则表达式

安稳与你 提交于 2019-12-01 12:21:51
# 正则基础知识点 1、元字符 万物皆有缘,正则也是如此,元字符是构造正则表达式的一种基本元素。 我们先来记几个常用的元字符: 元字符说明.匹配除换行符以外的任意字符w匹配字母或数字或下划线或汉字s匹配任意的空白符d匹配数字匹配单词的开始或结束^匹配字符串的开始$匹配字符串的结束 有了元字符之后,我们就可以利用这些元字符来写一些简单的正则表达式了, 比如: 匹配有abc开头的字符串:abc或者^abc 匹配8位数字的QQ号码:^dddddddd$ 匹配1开头11位数字的手机号码:^1dddddddddd$ 2、重复限定符 有了元字符就可以写不少的正则表达式了,但细心的你们可能会发现:别人写的正则简洁明了,而不理君写的正则一堆乱七八糟而且重复的元字符组成的。正则没提供办法处理这些重复的元字符吗? 答案是有的! 为了处理这些重复问题,正则表达式中一些重复限定符,把重复部分用合适的限定符替代,下面我们来看一些限定符: 语法说明*重复零次或更多次+重复一次或更多次?重复零次或一次{n}重复n次{n,}重复n次或更多次{n,m}重复n到m次 有了这些限定符之后,我们就可以对之前的正则表达式进行改造了,比如: 匹配8位数字的QQ号码:^d{8}$ 匹配1开头11位数字的手机号码:^1d{10}$ 匹配银行卡号是14~18位的数字:^d{14,18}$ 匹配以a开头的,0个或多个b结尾的字符串

正则表达式06

余生长醉 提交于 2019-11-28 03:03:53
预搜索(零宽断言) - 只进行子表达式的匹配,匹配内容不计入最终的匹配结果 ,是零宽度 - 对位置的匹配 ,某个位置应该是某个表达式,对前后位置字符的判断 (?=exp) 断言自身出现的位置的后面能匹配表达式exp (?<=exp) 断言自身出现的位置的前面能匹配表达式exp (?!exp) 断言此位置的后面不能匹配表达式exp (?<!exp) 断言此位置的前面不能匹配表达式exp 来源: https://www.cnblogs.com/code-fun/p/11387991.html

正则表达式

旧城冷巷雨未停 提交于 2019-11-27 15:14:30
正则表达式到底是什么东西? 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。 正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 很可能你使用过Windows/Dos下用于文件查找的 通配符(wildcard),也就是 *和 ?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里, *会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找 所有以0开头,后面跟着2-3个数字,然后是一个连字号"-",最后是7或8位数字的字符串(像 010-12345678或 0376-7654321)。 注:字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。 字符串是0个或更多个字符的序列。 文本也就是文字,字符串。说某个字符串 匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。 入门 学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。下面给出了不少简单的例子,并对它们作了详细的说明。 假设你在一篇英文小说里查找 hi,你可以使用正则表达式 hi。 这几乎是最简单的正则表达式了

正则表达式30分钟教程(转)

泪湿孤枕 提交于 2019-11-27 04:19:25
来园子之前写的一篇 正则表达式教程 ,部分翻译自codeproject的 The 30 Minute Regex Tutorial 。 由于评论里有过长的URL,所以本页排版比较混乱,推荐你 到原处查看 ,看完了如果有问题,再到这里来提出. 一些要说的话: 如果你没有正则表达式的基础,请跟着教程“一步步来”。请不要大概地扫两眼就说看不懂——以这种态度我写成什么样你也看不懂。当我告诉你这是“30分钟入门教程”时,请不要试图在30秒内入门。 事实是,我身边有个才接触电脑,对操作都不是很熟练的人通过自己学习这篇教程,最后都能在文章采集系统中使用正则表达式完成任务。而且,他写的表达式中,还使用了“零宽断言”等“高级”技术。 所以,如果你能具体地说明你的问题,我很愿意帮助你。但是如果你概括地说看不懂,那不是我的问题。 欢迎转载,但请声明作者以及来源。 正则表达式30分钟入门教程 版本:v2.31 (2009-4-11) 作者: deerchao 转载请注明 来源 目录 跳过目录 本文目标 如何使用本教程 正则表达式到底是什么东西? 入门 测试正则表达式 元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 联系作者 网上的资源及本文参考文献 更新纪录 本文目标

正则断言详解

风流意气都作罢 提交于 2019-11-26 19:32:33
正则断言的使用 零宽断言 匹配宽度为零,满足一定的条件/断言。 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配 零宽断言又分四种 先行断言(零宽度正预测先行断言) 表达式:(?=表达式) 表示匹配表达式前面的位置 先行断言的执行步骤是这样的先从要匹配的字符串中的最右端找到第一个ing(也就是先行断言中的表达式)然后 再匹配其前面的表达式,若无法匹配则继续查找第二个ing 再匹配第二个 ing前面的字符串,若能匹配 则匹配 .*(?=d) 可c以匹配abcdefghi 中的abc 后发断言(零宽度正回顾后发断言) 表达式: (?<=表达式) 表示匹配表达式后面的位置 后发断言跟先行断言恰恰相反 它的执行步骤是这样的:先从要匹配的字符串中的最左端找到第一个abc(也就是先行断言中的表达式)然后 再匹配其后面的表达式,若无法匹配则继续查找第二个abc 再匹配第二个abc后面的字符串,若能匹配 则匹配 例如(?<=abc).* 可以匹配abcdefg中的defg 负向断言 负向零宽先行断言 :(?!表达式) 负向零宽后发断言:(?<!表达式) 负向零宽断言 (?!表达式)

正则零宽断言 Regex.Replace(string,string,string)

折月煮酒 提交于 2019-11-26 17:26:55
一直对Regex.Replace(string,string,string)这个没仔细了解 今天终于明白了 Regex.Replace(string input,string pattern,string replacement) (1) input: http://www.xxx.com/news/5/ pattern:.*?xxx\.com/news/\d+/ replacement:news.aspx 结果news.aspx 因为input按照pattern匹配的结果为 http://www.xxx.com/news/5/ ,然后我们用news.aspx替换 最终结果就是news.aspx (2) input: abcedft http://www.xxx.com/news/5/6/7YYYYY pattern: http://(.*/?)\.*xxx.com/news/(\d+/)*(\d+)/ * replacement: /news.aspx 结果为 abcedft/news.aspxYYYYY 因为input 中匹配的为 http://www.xxx.com/news/5/6/7 (3) input:http://www.xxx.com/news/5/ pattern:http://(.*?)\.xxx.com/news/(\d+)/ replacement:news

正则零宽断言 Regex.Replace(string,string,string)

烈酒焚心 提交于 2019-11-26 17:26:45
一直对Regex.Replace(string,string,string)这个没仔细了解 今天终于明白了 Regex.Replace(string input,string pattern,string replacement) (1) input: http://www.xxx.com/news/5/ pattern:.*?xxx\.com/news/\d+/ replacement:news.aspx 结果news.aspx 因为input按照pattern匹配的结果为 http://www.xxx.com/news/5/ ,然后我们用news.aspx替换 最终结果就是news.aspx (2) input: abcedft http://www.xxx.com/news/5/6/7YYYYY pattern: http://(.*/?)\.*xxx.com/news/(\d+/)*(\d+)/ * replacement: /news.aspx 结果为 abcedft/news.aspxYYYYY 因为input 中匹配的为 http://www.xxx.com/news/5/6/7 (3) input:http://www.xxx.com/news/5/ pattern:http://(.*?)\.xxx.com/news/(\d+)/ replacement:news

正则零宽断言 Regex.Replace(string,string,string)

假装没事ソ 提交于 2019-11-26 17:26:40
一直对Regex.Replace(string,string,string)这个没仔细了解 今天终于明白了 Regex.Replace(string input,string pattern,string replacement) (1) input: http://www.xxx.com/news/5/ pattern:.*?xxx\.com/news/\d+/ replacement:news.aspx 结果news.aspx 因为input按照pattern匹配的结果为 http://www.xxx.com/news/5/ ,然后我们用news.aspx替换 最终结果就是news.aspx (2) input: abcedft http://www.xxx.com/news/5/6/7YYYYY pattern: http://(.*/?)\.*xxx.com/news/(\d+/)*(\d+)/ * replacement: /news.aspx 结果为 abcedft/news.aspxYYYYY 因为input 中匹配的为 http://www.xxx.com/news/5/6/7 (3) input:http://www.xxx.com/news/5/ pattern:http://(.*?)\.xxx.com/news/(\d+)/ replacement:news