Python正则表达式(二)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python正则表达式(二)相关的知识,希望对你有一定的参考价值。

参考技术A

上节我们说到 Python 正则表达式的基本字符,以及这些字符的用法

今天,我们继续讲讲 Python 中一些扩展标记法,以及一些特殊序列

(?...) : 这种扩展标记法以括号内 ? 开头,其后第一个字符决定了采用什么样的语法。

在 ? 后面添加( \'a\', \'i\', \'L\', \'m\', \'s\', \'u\', \'x\' 中的一个或多个),然后加上匹配规则。

这些字符对正则表达式设置以下标记,免去设置 flag 参数

注意 : \'a\', \'L\', \'u\' 作为内联标记是相互排斥的,它们不能结合在一起

括号分组的非捕获版本,该分组所匹配的子字符串 不能 在执行匹配后被获取或是在之后的模式中被引用

可以配合 | 和 m 使用

为分组再指定一个组合名

每个组合名只能用一个正则表达式定义,只能定义一次

反向引用一个命名组合

匹配前面那个名字叫 name 的命名组中匹配到的字符串

注释信息,里面的内容会被忽略。

哈哈,是不是没看懂,没事,举个栗子

看看,是不是一下子就明了了。

哈哈,这个又看不懂?

思考一下,既然有根据后面字符断言的,那么根据前面字符来断言,也是很合理的,

如果给定的 id 或 name 存在,将会尝试匹配 yes-pattern ,否则就尝试匹配 no-pattern , no-pattern 可选,也可以被忽略。

是不是有点像 if else 三目运算,其中 id 和 name 是分组 id 、和指定的分组名 name

照旧,举个栗子吧

看了栗子是不是有点糊涂呢,我们来解析一下这个正则表达式

其结果匹配的就是 <username@host.com> 和 username@host.com 。

而不会匹配 <user@host.com \' 和 <user@host.com

但是上面的第三个结果为啥不一样呢?

因为 findall 允许返回空匹配的,在有 ? 的情况下,所以它会分两种情况去匹配

今天讲了一些扩展标记法,其实没那么难,多看看例子,多练习练习。

下节将介绍 re 模块各函数的用法,敬请期待......

以上是关于Python正则表达式(二)的主要内容,如果未能解决你的问题,请参考以下文章

python:正则1

python模块练习二—使用正则表达式实现计算器的功能

python系列——正则表达式之re模块01

python正则表达式(基础)

学会python正则表达式就是这么简单

python--正则表达式