zoukankan      html  css  js  c++  java
  • 数据提取之re

    正则表达式

    在线测试网址:https://tool.oschina.net/regex/

    一:匹配单个字符

    • 匹配某个字符
      
      
    • (.)匹配任意字符,但是--不匹配换行符[
      或
      ]
      
    • d 匹配任意的数字(0-9)
      
    • D 匹配任意非数字
      
    • s--小写--匹配空白字符(
      ,	,
      ,和空格)
      
    • S--大写--匹配任意的非空白字符
      
    • w--小写--匹配a-z,A-Z,数字和下划线 [a-zA-Z0-9_]
      
    • W--大写--匹配非字母数字下划线.等价于[^a-zA-Z0-9_]
      
    • []用来表示一组字符--匹配第一个满足任意正则表达式的字符
      相当于字符串中字符一个一个去匹配re,匹配上了就输出
      import re
      text="0746-123456789"
      ret=re.search('[d-]',text)   #匹配结果为0,匹配一个满足的字符,后面的就不匹配了
      ret=re.search('[-dd]',text)   #匹配结果为0
      print(ret.group())
      

    二:匹配多个字符

    • *:匹配0或者任意多个字符
       text="0746-123456789"
       ret=re.search('d*',text)   #匹配结果为0476
      
    • +:匹配1个或者多个    
      
    • ?:匹配0个或者1个--非贪婪
      
    • {m}:指定具体多少个
      text="0746-123456789"
      ret=re.search('d{2}',text)   #匹配结果为07
      
    • {m,n}:匹配最少m个,最多n个---贪婪匹配
      

    三:小案列

    • 验证手机号

      规则:以1开头,第二位可以是[34587],后面9位任意数字
      pattern='1[34587]d{9}'
      
    • 验证邮箱

      规则:邮箱名称是用数字,字母,下划线组成,然后是@符号,后面是域名
      pattern='w+@w+.[a-zA-Z.]+'   
      注意:@前面至少要有1个,所以用+   转义.   com或者com.cn--- 用[a-zA-Z.]+任意字母和.
      
    • 验证URL

      规则:http或者http或fts等协议头,再加上:// ,然后任意非空白字符
       pattern='(http|https|ftp)://[^s]+'
       pattern='[a-zA-Z]://[^s]*'
      
    • 验证身份证

      规则:身份证共19位,前17位是数字,最后一位可以使小写x,大写X,数字
       pattern='d{17}[xXd]'
      

    四:注意点

    贪婪模式
    .+   .*:匹配任意字符
    
    非贪婪模式
    .+?   .*?
    
    ^:以...开头
    $:以...结尾
    
    转义
    

    五:re模块中的常用函数

    • re.match('pattern',str,修饰符):从开始的位置进行匹配,如果开始的位置没有匹配到,就返回None
    • match()函数适合用来做检测,判断某个字符串是否符合某个re规则
    str='hello'
    ret=re.match('h',str)
    print(ret.group())  # 结果为h
    #group()  会输出完成的匹配结果
    #group(1)  会输出完整匹配中--用第1个()括起来的字符串
    
    
    
    分组:使用()的方式
    1:group()和group(0)是一样的,都是返回完整的匹配内容
    2:groups() :返回的是里面的子组,索引从1开始
    3:group(1)  :返回的第一个子组,同上
            
    str="apple's price is $10,pink's price is $11"
    pattern='.*($d+).*($d+)'
    ret=re.match(pattern,str)
    print(ret.group())    #   apple's price is $10,pink's price is $11
    print(ret.groups())   #   ('$10', '$11')
    print(ret.group(1))	  #   $10
    print(ret.group(1,2))  #  ('$10', '$11')
    
    修饰符号:
        re.I     使匹配对大小写不敏感
        re.S     使.匹配包括换行符在内的所有内容
        
    pattern='.*($d+).*($d+)'
    ret=re.match(pattern,str,re.S)
    
    • re.search():会扫描整个字符串,然后返回 第一个成功匹配的结果,如果扫描完了没匹配上,就返回None

    • re.findall():匹配满足正则表达式的所有内容,返回一个列表

      遍历依次来获取每组内容

    • re.sub(pattern,“要替换的字符串”, 原字符串 )

      html=re.sub('<a.*?>|</a>',"",html)   #使用sub()方法将a节点去掉
      
      
    • re.split():使用正则表达式来分割字符串

      str="hello world i love you"
      ret=re.split('W',str)
      print(ret)     # ['hello', 'world', 'i', 'love', 'you']
      
      str="hello&world i love you"
      ret=re.split(' |&',str)  
      print(ret)     #  ['hello', 'world', 'i', 'love', 'you']
      
      ret=re.split('^[a-zA-Z]',str)
      
    • re.compile():将常用 正则字符串,编译成 正则表达式对象,以便在后面复用

  • 相关阅读:
    TCP/IP(三)数据链路层~2
    TCP/IP(三)数据链路层~1
    TCP/IP(二)物理层详解
    Maven(六)之依赖管理
    RAID : 独立磁盘冗余阵列(Redundant Array of Independent Disks)
    Oracle启动两个监听
    Oracle服务器修改IP后
    su: cannot set user id: Resource temporarily unavailable
    hadoop报错:java.io.IOException(java.net.ConnectException: Call From xxx/xxx to xxx:10020 failed on connection exception: java.net.ConnectException: 拒绝连接
    spring boot 实现mybatis拦截器
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/12369569.html
Copyright © 2011-2022 走看看