• 数据提取之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():将常用 正则字符串,编译成 正则表达式对象,以便在后面复用

  • 相关阅读:
    webapp之路--meta标签format-detection、apple-mobile-web-app-capable
    js 进行年月日时间差计算
    JS手机邮箱身份证号码的正则验证以及通过身份证号码获取出生年月日
    react setState()方法可以只修改一个对象的部分属性
    js获取当前时间格式YYYY/MM/DD
    提高CSS开发能力的技巧集
    JavaScript专业规则12条
    为什么大型网站前端使用PHP后台逻辑用Java
    Cookie与Session的区别
    2016年JavaScript技术栈展望
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/12369569.html
Copyright © 2020-2023  润新知