Python 正则表达式进阶与实战

Source
  • 元字符实战
    • 提前字符串中所有的数字或者非数字
      • import re
        
        string = "1a2b3c4d5e"
        result = re.findall("[0-9]",string)
        print("这是result",result)
        result = re.findall("[0-3]",string)
        print("这是result",result)
        
        string = "1a2b3c4d5e6f7g8h9i10j"
        result = re.findall("[0-9]",string)
        print("这是result",result)
        
        这是result ['1', '2', '3', '4', '5']
        这是result ['1', '2', '3']
        这是result ['1', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0']
        
        
        
        
        string = "1a2b3c4d5e"
        result = re.findall("[^0-9]",string)
        print("这是result",result)
        result = re.findall("[^0-3]",string)
        print("这是result",result)
        string = "1a2b3c4d5e6f7g8h9i10j"
        result = re.findall("[^0-9]",string)
        print("这是result",result)
        这是result ['a', 'b', 'c', 'd', 'e']
        这是result ['a', 'b', 'c', '4', 'd', '5', 'e']
        这是result ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
        
  • 字符集实战
    • 提前字符串中所有的数字或者非数字
      • import re
        
        string = "1a2b3c4d5e"
        result = re.findall("\d",string)
        print("这是result",result)
        这是result ['1', '2', '3', '4', '5']
        
        string = "1a2b3c4d5e"
        result = re.findall("\D",string)
        print("这是result",result)
        这是result ['a', 'b', 'c', 'd', 'e']

        ​​​​​​​​​​​​​​​​​​​​​

  • 数量词实战
    • 提取大小写字母混合的单词
      •  
        import re
        
        string = "CuPT FroM SWupT"
        minlen = 3
        maxlen = 50
        result = re.findall("[a-zA-Z]"+"{" +str(minlen)+","+str(maxlen)+"}",string)
        print("这是result",result)
        这是result ['CuPT', 'FroM', 'SWupT']
        

  • 边界匹配
    •  提取一串号码
    • import re
      string = "15915930230212"
      minlen = 5
      maxlen = 20
      result = re.findall("\d"+"{" +str(minlen)+","+str(maxlen)+"}",string)
      print("这是result",result)
      
      这是result ['15915930230212']

  •  组
    • import re
      a = 'abcabcabcxyzabcabcxyzabc'
      result1 = re.findall('(abc){1}',a)
      result2 = re.findall('(abc){2}',a)
      result3 = re.findall('(abc){3}',a)
      print(result1)
      print(result2)
      print(result3)
      
      
      ['abc', 'abc', 'abc', 'abc', 'abc', 'abc']
      ['abc', 'abc']
      ['abc']

  • 常用正则表达式
    • 数字

      ^[0-9]$

      n位的数字

      ^\d{n}$

      至少n位的数字

      ^\d{n,}$

      m-n位的数字

      ^\d{m,n}$

      零和非零开头的数字

      ^(0|[1-9][0-9]*)$

      非零开头的最多带两位小数的数字

      ^([1-9][0-9]*)+(.[0-9]{1,2})?$

      带1-2位小数的正数或负数

      ^(\-)?\d+(\.\d{1,2})?$

      正数、负数、和小数

      ^(\-|\+)?\d+(\.\d+)?$

      有两位小数的正实数

      ^[0-9]+(.[0-9]{2})?$

      有1~3位小数的正实数

      ^[0-9]+(.[0-9]{1,3})?$

      非零的正整数

      ^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

      非零的负整数

      ^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$

      非负整数

      ^\d+$ 或 ^[1-9]\d*|0$

      非正整数

      ^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

      非负浮点数

      ^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

      非正浮点数

      ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

      正浮点数

      ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

      负浮点数

      ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

      浮点数

      ^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$