python基础语法 - 正则表达式

本文详细介绍了Python中的正则表达式,包括元字符、转义字符、开始与结束符、字符类、量词、分组以及re模块的使用。正则表达式在数据挖掘、网络爬虫等领域有广泛应用,其高效能弥补了编写难度大的不足。文章通过实例演示了各种正则表达式的使用方法,如字符类的取反、贪婪与懒惰量词的区别、分组的命名和反向引用等,帮助读者掌握正则表达式的核心技巧。
摘要由CSDN通过智能技术生成

  • 是什么:Regular Expression,简写RE,是预先定义好的一个“规则字符串”,通过这个规则字符串可以匹配、查找和替换那些符合规则的文本。
  • 优点:文本的查找替换虽然可以使用字符串提供的方法实现,但是实现较为困难,运算效率低。使用正则效率高。
  • 缺点:编写合适的正则表达式较为困难。
  • python中应用:数据挖掘、数据分析、网络爬虫、输入有效性验证等待。

正则表达式字符串

  • 正则表达式是一种字符串,它由普通字符和元字符组成的。
  • 普通字符:按照字符字面意义的字符。
  • 元字符:预先定义好的一些特定字符。
  • 如验证邮箱的正则表达式:\w+@zhengzetang\.com,其中\w+\.属于元字符;@zhengzetangcom是普通字符。

元字符

  • 用来描述其他字符的特殊字符,由基本元字符和普通字符构成,基本元字符是构成元字符的组成要素。基本元字符有14个,如下表在这里插入图片描述

转义字符

  • 以上面匹配邮箱的字符串\w+@zhengzetang\.com为例
  • w字符不表示英文字母w,而是表示任何语言的单词字符、数字或下划线等内容时,需要在w前面加上反斜杠“\”。
  • .本身是基本元字符,代表任意一个字符,但是我们希望按照.字面的意义使用(就是一个点),这时候加上一个反斜杠“\”就可以实现了。
  • 转义字符\就是对普通字符或基本元字符,进行转义,用于其他功能。

开始与结束符

  • 前面提到了^$,用以匹配一行字符串的开始和结束。
  • 当以^开始时,要求一行字符串的开始位置匹配。
  • 当以$结束时,要求一行字符串的结束位置匹配。
    import re 
    
    p1 = r'\w+@tianshangrenjian\.com'
    p2 = r'^\w+@tianshangrenjian\.com$'
    
    text = "My email is tong_guan588@tianshangrenjian.com."
    m = re.search(p1, text)
    print(m)
    
    # 匹配不到,有^,$符号,匹配时要求text字符串开始和结束都要与正则表达式开始和结束匹配。
    a = re.search(p2,text)
    print(a)
    
    # email字符串的开始与结束与正则表达式相匹配
    email = 'tong_guan588@tianshangrenjian.com'
    b = re.search(p2, email)
    print(b)
    
  • 显示结果
    在这里插入图片描述

字符类

  • 正则表达式种可以使用字符类(character class),一个字符类定义一组字符,其中的任一字符出现在输入字符串中即匹配成功。
  • 注意:每次匹配只能匹配字符串中的一个字符。

定义字符类

  • 定义一个普通的字符类,使用[]元字符类。例,想在字符串中匹配java或Java,可以使用正则表达式[Jj]ava
    import re
    
    p = r'[Jj]ava'
    
    # 可以匹配
    m = re.search(p, 'i like Java and Python')
    print(m)
    
    # 可以匹配
    c = re.search(p, 'i like java and Python')
    print(c)
    
    # 不可匹配
    b = re.search(p, 'i like JAVA and Python')
    print(b)
    
    # 想要匹配JAVA,可以使用|
    p2 = r'java|JAVA|Java'
    d = re.search(p2, 'i like JAVA and Python')
    print(d)
    
  • 运行结果为
    在这里插入图片描述

字符类取反

  • 在正则表达式中指定不想出现的字符, 可以在字符前加^符号。
    import re 
    
    p = r'[^0123456789]'
    
    # 不匹配数字
    m = re.search(p, '239120392')
    print(m)
    
    # 除了非数字外,都可以匹配任意字符
    a = re.search(p, 'Reasdskf')
    print(a)
    
  • 运行结果
    在这里插入图片描述

区间

  • 如果要表示连续的数字,用[^0123456789],较为复杂,可以使用区间符号-表示。即[^0123456789]等同于[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值