zoukankan      html  css  js  c++  java
  • 正则表达式-常用元字符的基本使用

    常用元字符有:

    []  ^  $    *  +  ?  {} .

    python中使用正则表达式需要导入re模块

    下面介绍用法

    [] 指定一个字符集,[ABC]表示ABC的字符集,[^ABC] 取反,除了ABC的字符集。

    >>> import re
    >>> r = r"ABC[ABC]" #定义一个正则
    >>>
    >>> re.findall(r,'ABCA') #使用findall进行匹配
    ['ABCA']
    >>> re.findall(r,'ABCB')
    ['ABCB']
    >>> re.findall(r,'ABCD')
    []
    >>> r = r"ABC[^ABC]" #取反
    >>> re.findall(r,'ABCD')
    ['ABCD']
    >>> re.findall(r,'ABCA')
    []
    >>>
    

    ^ 匹配行首 ^h 如果行首是h,则返回h,如果不是h则返回空

    >>> r = r"^h"
    >>> re.findall(r,'hello')
    ['h']
    >>> re.findall(r,'ehllo')
    []
    >>>

    $ 匹配行尾,和^是反着来的,不难理解,匹配末尾

    >>> r = r"h$"
    >>> re.findall(r,'hello')
    []
    >>> re.findall(r,'olleh')
    ['h']
    >>>

    转义字符

    反斜杠后面加不同的字符以表示不同的特殊含义

    d 匹配任何十进制数 相当于[0-9]
    D 匹配任何非数字字符,相当于[^0-9]
    s 匹配任何空白字符,相当于[	
    
    fv]
    S 匹配任何非空白字符,相当于[^	
    
    fv]
    w 匹配任何字母数字字符,相当于[a-zA-Z0-9]
    W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9]
    >>> r1 = r"day=d"
    >>> r2 = r"day=D"
    >>> st = 'day=1 day=2 day=3 day=a day=b day=c'
    >>> re.findall(r1,st)
    ['day=1', 'day=2', 'day=3']
    >>> re.findall(r2,st)
    ['day=a', 'day=b', 'day=c']
    >>>
    >>> r3 = r"enter=s"
    >>> r4 = r"enter=S"
    >>>
    >>> st = '''
    enter=
    enter=1 enter=  enter=3 enter=
    enter=
    '''
    >>> re.findall(r3,st)
    ['enter=
    ', 'enter= ', 'enter=
    ', 'enter=
    ']
    >>> re.findall(r4,st)
    ['enter=1', 'enter=3']
    >>>
    >>> r5 = r"w"
    >>> r6 = r"W"
    >>> st = 'abcdefg1234567!@#$%^&'
    >>> re.findall(r5,st)
    ['a', 'b', 'c', 'd', 'e', 'f', 'g', '1', '2', '3', '4', '5', '6', '7']
    >>> re.findall(r6,st)
    ['!', '@', '#', '$', '%', '^', '&']
    >>>

    * + ? 都是重复的意思

    *重复0次或多次、+重复1次或多次、?重复0次或1次

    >>> r1 = r"ab*"
    >>> re.findall(r1,'a')
    ['a']
    >>> re.findall(r1,'ab')
    ['ab']
    >>> re.findall(r1,'abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
    ['abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb']
    >>>
    >>> r2 = r"ab+"
    >>> re.findall(r2,'ab')
    ['ab']
    >>> re.findall(r2,'a')
    []
    >>> re.findall(r2,'abbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
    ['abbbbbbbbbbbbbbbbbbbbbbbbbbbbb']
    >>>
    >>> r3 = r"ab?"
    >>> re.findall(r3,'a')
    ['a']
    >>> re.findall(r3,'ab')
    ['ab']
    >>> re.findall(r3,'abb')
    ['ab']
    >>> re.findall(r3,'abbbbbbbbbb')
    ['ab']
    >>>

    {}表示重复的范围,{m,n}最少重复m次,最多重复n次

    举个成绩的例子吧,最少1位,最多2位。

    >>> r1 = r"d{1,3}"
    >>> re.findall(r1,'100')
    ['100']
    >>> re.findall(r1,'1')
    ['1']
    >>> re.findall(r1,'')
    []
    >>> re.findall(r1,'1000')
    ['100', '0']
    >>> re.findall(r1,'1001')
    ['100', '1']
    >>>

    它会把多余的位扔到列表的后面元素中。

    .的用法就是匹配所有,看下面例子即可

    .*是匹配0次或多次,.+是1次或多次,一般用+

    >>> r1 = r"src=.*"
    >>> re.findall(r1,'src=img http qwerqwer')
    ['src=img http qwerqwer']
    >>> re.findall(r1,'src=img http hello')
    ['src=img http hello']
    >>>
    >>> r1 = r".*.com"
    >>> re.findall(r1,'www.com')
    ['www.com']
    >>> re.findall(r1,'hello.com')
    ['hello.com']
    >>>


    读书和健身总有一个在路上

  • 相关阅读:
    Windows环境下阿里云添加SSH Key及Git配置Key
    Shiro自定义注解扩展@SalmonRequiresPermission
    windows下安装redis
    模型-视图-控制器的C++解释
    CentOS 7 搭建 GitLab
    博客园主题分享——绿色
    2019年的第一篇博客
    Qt——线程与定时器
    Qt——线程类QThread
    QML——添加自定义模块
  • 原文地址:https://www.cnblogs.com/Renqy/p/12792099.html
Copyright © 2011-2022 走看看