zoukankan      html  css  js  c++  java
  • re模块

    ^:匹配字符串的开头
    $:匹配字符串的末尾。
    A:匹配字符串的开头
    :匹配字符串的末尾
    .:匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
    [...]:用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
    [^...] : 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
    re*: 匹配0个或多个的表达式。
    re+:匹配1个或多个的表达式。 有几个匹配几个
    re?: 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 只匹配符合条件最少字符
    re{ n}:精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。
    re{ n,}:匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。
    '|':匹配|左或|右的字符,re.search('abc|ABC','ABCBabcCD').group()) 返回结果ABC
    (re):对正则表达式分组并记住匹配的文本
    "o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
    (?imx):正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
    [a-z]:匹配a-z之间任意字符 [0-9] [A-Z] 相同
    [^a-z] :匹配除a-z之间的数
    d :匹配任意数字等价[0-9]
    D:匹配一个非数字 [^0-9]
    w :匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
    W:匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
    s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]。
    S:匹配任何非空白字符。等价于 [^ f v]。

    匹配三种方法:  
      
    re.match(正则表达式,字符串) 从头开始匹配的
      re.search():匹配到一个就返回,匹配不到返回空
      re.findall:返回所有匹配结果,findall没有group()方法
      re.split():分割
      re.sub():替换

      例子:
        print(re.match('[0-9]{1,3}','aaalb345d67b')) # None
        print(re.search('[0-9]{1,3}','aaalb345d67b')) # <_sre.SRE_Match object; span=(5, 8), match='345'>
        print(re.findall('[0-9]{1,3}','aaalb345d67b')) # ['345', '67']

    具体每种匹配规则的实例:
      print(re.match('aaa?','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 3), match='aaa'>
      
    print(re.match('^a','aaalb345d67b')) #<_sre.SRE_Match object; span=(0, 1), match='a'>
      print(re.search('b$','aaalb345d67b')) #<_sre.SRE_Match object; span=(11, 12), match='b'>
      print(re.match('a.','aaalb345d67b')) #<_sre.SRE_Match object; span=(0, 2), match='aa'>
      print(re.match('a*','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 3), match='aaa'>
      print(re.match('a+','aaalb345d67b')) #<_sre.SRE_Match object; span=(0, 3), match='aaa'>
      print(re.match('a.+','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 12), match='aaalb345d67b'>
      print(re.match('a.*','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 12), match='aaalb345d67b'>

      print(re.findall('a{2}','aaalb345d67b')) # <_sre.SRE_Match object; span=(0, 2), match='aa'>
      print(re.search('abc|ABC','ABCBabcCD')) # <_sre.SRE_Match object; span=(0, 3), match='ABC'>
      print(re.search('abc|ABC','ABCBabcCD').group()) # ABC
      # findall没有group()方法
      print(re.findall('abc|ABC','ABCBabcCD')) # ['ABC', 'abc']

    分组匹配: 
      group() 
      
      line = "Cats are smarter than dogs"
      # r代表为非转义的原始字符串
      matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
      if matchObj:
      #matchObj.group() 等同于 matchObj.group(0),表示匹配到的完整文本字符
      print("matchObj.group() : ", matchObj.group()) # Cats are smarter than dogs
      # (.*) 第一个匹配分组,.* 代表匹配除换行符之外的所有字符
       print ("matchObj.group(1) : ", matchObj.group(1)) #Cats
      # (.*?) 第二个匹配分组,.*? 后面多个问号,代表非贪婪模式,也就是说只匹配符合条件的最少字符 0个或1个
       print ("matchObj.group(2) : ", matchObj.group(2)) #smarter
      else:
      print ("No match!!")


      
    '(?P...)' 分组匹配
      
      print(re.search('(?P<id>[0-9]+)','abcd1234daf034').group()) # 1234

      s = '1102231990xxxxxxxx'
      res = re.search('(?P<province>d{3})(?P<city>d{3})(?P<born_year>d{4})',s)
      print(res.groupdict()) #{'province': '110', 'city': '223', 'born_year': '1990'}

    分割和替换:
      # 分割:re.split(正则表达式,字符串)
      print(re.split('[0-9]+','abc12de3f45GH')) # ['abc', 'de', 'f', 'GH']
      # 替换:re.sub(正则表达式,替换值,字符串)
      print(re.sub('[0-9]+','s','abc12de3f45GH')) # abcsdesfsGH

      

  • 相关阅读:
    uWSGI, Gunicorn, 啥玩意儿?
    Internet设置->连接选项卡->局域网(LAN)设置 某些设置由系统管理员进行管理
    windows下python2和python3共存
    python3.5之输出HTML实体字符
    python3.5之string
    js获取本周、本月、本季、本年的第一天
    滚动加载图片(懒加载)实现原理
    构造函数模式实现拖拽效果
    图片轮播之面向过程写法
    适用grunt的注意点
  • 原文地址:https://www.cnblogs.com/aiyumo/p/12013223.html
Copyright © 2011-2022 走看看