【正则表达式】程序员的“瑞士军刀”

本文深入浅出地介绍了正则表达式的概念及其在Python中的应用。通过具体案例,如筛选正确的QQ邮箱地址,展示了正则表达式的强大功能。文章详细解析了正则表达式的规则,包括匹配、空白元字符及子表达式,并介绍了re模块的常用函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博主前言:

在上学的时候有幸读了一本书,说是一本书,倒不如说是一个小册子。这本册子就是计算机技术大佬Ben Forta编写的《正则表达式必知必会》。这本册子使用简明又实用的例子,让我对正则表达式产生了浓厚的兴趣。在后期的学习中我发现,正则表达式是真的太强大了,特别是在处理复杂旳文本和表单时,正则表达式极大的让原本复杂的编码化成简单的、易懂的字符串。当然,在此之前,你要弄懂以及熟悉正则表达式的相关规则。

1. 什么是正则表达式?

简单地说,正则表达式就是用来处理文本的字符串。
当我们要处理一段文本时,如搜索、匹配、替换等,
首先,我们可以使用正则表达式语言来定一个正确的模板,
然后,用这个模板在文本中去匹配。在这里插入图片描述
在Python语言中,使用正则表达式需要导入re模块。

import re

def main():
    """选出正确的QQ邮箱"""
    datas = ["tomato@qq.com","potato@qq.comcom","konat0@163.com"]
    for data in datas:
        test = re.match("[a-zA-z0-9]*@qq\.com$",data)
        if test:
            content = test.group()      # 取出test的值
            print(content)          # 若存在返回值就输出

if __name__ == '__main__':
    main()

在上段代码中 [a-zA-z0-9]*@qq\.com$ 就是一串正则表达式。
(如果看不懂,请阅读全篇文章后再回来理解)
使用re模块的match函数可以得到一个符合正则表达式的对象
如果没有符合正则表达式的对象,就会返回空(并不会报错),
所以,博主在学习正则表达式的时候总结了一句话:
没有错误的正则表达式,只有不正确的正则表达式。
运行上段代码,结果如下图所示。
在这里插入图片描述

2. 正则表达式规则

2.1 匹配

.匹配任何一个单个的字符
[]匹配 [] 中列举的字符
^匹配字符串开头 / 取非匹配
\d匹配一个数字
\D匹配一个非数字
\s匹配空白,即空格键、tab键
\S匹配非空白
\w匹配任何一个字母数字字符或下划线(大小写均可)
\W匹配任何一个非字母数字字符或下划线
{n}匹配 {} 前一个字符出现n次
{m, n}匹配 {} 前一个字符出现从m次到n次
*匹配零个或多个字符(可有可无)
+匹配一个或多个字符(至少一个)
?匹配零个或一个字符
*?*的懒惰型元字符
+?+的懒惰型元字符
{n,}?{}的懒惰型元字符

2.2 空白元字符

\转义字符
\f换页符
\n换行符
\r回车符
\t水平制表符(Tab键)
\v垂直制表符
\b单词限定符

2.3 子表达式

()子表达式
|逻辑或
(?P<name> )子表达式取别名
(?P=name)引用别名为name的子表达式

3. re模块的常用函数

函数名区别
match默认从字符串开头开始匹配字符串
search不会从头匹配,直接找第一个符合正则表达式的字符串
findall找出所有符合正则表达式要求的字符串
函数名作用
sub替换,例 re.sub(“正则表达式”,“A”,“B”),将B中符合正则表达式的字符串替换成A,A处可嵌套函数使用
split切割,例re.split(“正则表达式”,“A”),将A中所有符合正则表达式的地方切割,返回一个元素列表

注意:

  1. 当在字符集合里使用的时候,像 .+ 这样的字符将被解释为普通字符,不需要被转义。
  2. \b匹配得是一个位于能够用来构成单词的字符(字母、数字和下划线,也就是与\w相匹配的字符)和一个不能用来构成单词的字符(也就是与\W相匹配的字符)之间。
  3. ^ 元字符作用于[]里并紧跟[的后面时,发挥取非匹配的作用。没有作用于[]时,发挥匹配字符串开头的作用。
  4. 子表达式()作用于重复匹配,超好用。
  5. “ \r\n ”,操作系统文本结束的标签。
  6. 后续补充…

整理码字不易,请读者素质三连以求支持,感谢阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值