如何使用正则表达式和 Python 匹配不以模式开头的字符串
需要在 Python 中使用正则表达式来匹配不以给定模式开头的字符串吗?
如果是这样,你可以使用下面的语法来查找所有的字符串,除了那些不以https 开始的字符串。
在这个例子中,我们有一个 URL 的列表。假设你想得到所有不以https 开始的网址。
为了这个目的,我们将使用负数查找。
其结果是。
它是如何工作的?
- ^ – 断定位置在字符串的开头
- (?!https) – 负向查找 – 断言重码不匹配 – https
- .* – 匹配0到无限次之间的任何字符
现在,让我们试着找到所有不以……开头的字符串。
- https
- ftp
我们可以使用| ,也就是在regex语法中 -r\”^(?!https|ftp).*\” 。
结果是。
[][\’http://en..org/wiki/National_Park_Service/\’] [][\’http://en..org/wiki/United_States_Bureau_of_Reclamation/\’]
[][\’en..org/wiki/Africa/\’ ][]
注意:你可以用| 添加许多模式。
最后让我们看看如何匹配所有不以几个字符开头的字符串,比如。
- f
- h
这次我们要列出方括号内的所有字符:[^hf] 。语句[hf] 意味着匹配字母 -f 或h ,而^ 则否定匹配。
换句话说,匹配列表中不存在的单个字符 -[hf] 。
所以我们可以使用。
这将给我们带来。
「正则表达式」 一、正则表达式字符匹配(前端必懂 )
原书这么一句话,特别棒:正则表达式是匹配模式,要么匹配字符,要么匹配位置,要记住。
正则表达式的强大在于它的模糊匹配,这里介绍两个方向上的“模糊”:横向模糊和纵向模糊。
- 横向模糊匹配
即一个正则可匹配的字符串长度不固定,可以是多种情况。
如 /ab{2,5}c/ 表示匹配: 第一个字符是 \”a\” ,然后是 2 – 5 个字符 \”b\” ,最后是字符 \”c\” :
- 纵向模糊匹配
即一个正则可匹配某个不确定的字符,可以有多种可能。
如 /[abc]/ 表示匹配 \”a\”, \”b\”, \”c\” 中任意一个。
- 范围表示法
可以指定字符范围,比如 [1234abcdUVWXYZ] 就可以表示成 [1-4a-dU-Z] ,使用 – 来进行缩写。
如果要匹配 \”a\”, \”-\”, \”z\” 中任意一个字符,可以这么写: [-az] 或 [a\\-z] 或 [az-] 。
- 排除字符组
即需要排除某些字符时使用,通过在字符组第一个使用 ^ 来表示取反,如 [^abc] 就表示匹配除了 \”a\”, \”b\”, \”c\” 的任意一个字符。
- 常见简写形式
量词也称重复,常用简写如下:
- 贪婪匹配和惰性匹配
在正则 /\\d{2,4}/ ,表示数字连续出现 2 – 4 次,可以匹配到 2 位、 3 位、4 位连续数字。
但是在 贪婪匹配 如 /\\d{2,4}/g ,会尽可能多匹配,如超过 4 个,就只匹配 4 个,如有 3 个,就匹配 3 位。
而在 惰性匹配 如 /\\d{2,4}?/g ,会 尽可能少 匹配,如超过 2 个,就只匹配 2 个,不会继续匹配下去。
即提供多个子匹配模式任选一个,使用 |(管道符)分隔,由于分支结构也是惰性,即匹配上一个后,就不会继续匹配后续的。
格式如:(r1|r2|r3),我们就可以使用 /leo|pingan/ 来匹配 \”leo\” 和 \”pingan\”。
匹配字符,无非就是字符组、量词和分支结构的组合使用。
- 十六进制颜色值匹配
- 时间和日期匹配
- Windows操作系统文件路径匹配
盘符使用 [a-zA-Z]:\\\\ ,这里需要注意 \\ 字符需要转义,并且盘符不区分大小写;
文件名或文件夹名,不能包含特殊字符,使用 [^\\\\:*<>|\”?\\r\\n/] 表示合法字符;
并且至少有一个字符,还有可以出现任意次,就可以使用 ([^\\\\:*<>|\”?\\r\\n/]+\\\\)* 匹配任意个 文件夹\\;
还有路径最后一部分可以是 文件夹 ,即没有 \\ 于是表示成 ([^\\\\:*<>|\”?\\r\\n/]+)?。
- id匹配
如提取 <div id=\”leo\” class=\”good\”></id> 中的 id=\”leo\” :
tips1:由于 . 匹配双引号,且 * 贪婪,就会持续匹配到最后一个双引号结束。
tips2:使用惰性匹配,但效率低,有回溯问题。
tips3:最终优化。
公众号:前端自习课
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。