ad

打开《Python入门与实战》_一步步学会Python_3.7.1 正则表达式的编写规则

admin 165 2023-10-25

【摘要】 本书摘自《Python入门与实战》一书中第3章,第7节,由王跃进主编。

3.7.1 正则表达式的编写规则

正则表达式中,主要由表示字符类型(匹配什么)、数量(匹配多少)、位置(在 哪里匹配)等字符组成。在这些字符中,有些字符并不是指匹配自己,而是表示其他 意义的字符。如 “a$", 不是表示字符串中需要有“$”,而是表示字符串要以 “a”结

尾,我们把这样的字符叫作元字符。元字符有: ^$*+?\ | ()[] {11

个。“\”叫作转义字符,后边跟元字符去除特殊功能,后边跟普通字符实现特殊功能。

说明:如果这些元字符后面没有表示数量的元字符,则表示匹配1个。

[]字符集合,可匹配其中任意一个字符,除了^、 -、]、\以外,其他字符都表示字 符本身。“A" 放在第1个位置时,表示否定,放在其他位置时就表示 “A”本身;"- ” 放在中间位置表示“到”的意思,放在最前或最后时都表示“- ”本身。“]”放在第1 个位置时表示“]”本身,其他位置表示与前面“[”配对的终止符号,“\”转义字符。

打开《Python入门与实战》_一步步学会Python_3.7.1 正则表达式的编写规则

4. 分组,小括号()

对单个字符进行重复,可以在字符后面跟上表示位置的字符即可,但如果要对多 个字符进行重复怎么办呢?此时就要用到分组,可以使用小括号()来指定要重复的 子表达式,然后对这个子表达式进行重复,例如: (abc)? 表示0个或1个 abc 这里一 个括号里的表达式就是一个分组。

再如,要从一个类似于“010-88888888”的固定电话号码字符串中提取区号和电话 号码。同样需要分组,可以使用r'(\d{3,4})-(\d{8})得到结果。

()的功能比较复杂,这里只介绍分组中几个较为简单的功能。

(1)捕获组:( …),语法格式如下:

(rule), 匹配 rule并捕获匹配结果,自动设置组号。这里的捕获是指仅提取与 rule 匹配的内容,而不提取()外面的内容。例子:

pattern=r'(\d{3,4})-(\d{8})'

dst str="010-88888888"

将提取出:010、88888888,但不提取"-"。

(2)无捕获组:(?: …),语法格式如下:

(?:rule), 匹配 rule但不捕获匹配结果,这里的不捕获是指不单独提取与rule匹配 的内容,而是要与()外面的内容一起提取。例子:

pattern=r'(?:\d{3,4})-(?:\d{8})'

dst str="010-88888888"

将提取出:010-88888888。

也许你会发现 r'(?:\d{3,4})-(?:\d{8})与 r'\d{3,4}-\d{8}'得到的结果是一样的,(?: rule)究竟有什么作用呢?如果需要匹配形如“999.999.999.999”这样的字符串,就可以 使用r'(?:\d{3}\.){3}\d{3}', 如果不用分组,就需要使用r\d{3}\.\d{3}\.\d{3}\.\ d{3}', 这就是他们的区别。

(3)前向界定:(?<=…)、前向否定界定:(?

这些界定符号的作用是表达需要匹配的内容“在(不在)什么之后,在(不在) 什么之前"这种判断。

例子:写出“在

之后且在

之前”的正则表达式。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:学会《大数据可视化技术》_轻松读懂你的数据_2.5 数据可视化的基本图表
下一篇:《给所有人的Python》_第四版_也是给你的一本知识宝典_3.2.1 定义 set
相关文章
×