zoukankan      html  css  js  c++  java
  • 正则表达式

    正则表达式

    1.什么是正则?

    是编程语言,用于匹配字符串,没有唯一标准答案,能匹配到即可
    是通用语言,在python中通过re模块来实现

    2.正则在线工具

    正则表达式速查表
    https://www.jb51.net/shouce/jquery1.82/regexp.html

    在线正则表达式测试
    https://tool.oschina.net/regex

    3.字符匹配

    普通字符

    大部分字符与自身完全匹配,例如表达式good与字符串'good'完全匹配

    元字符(重要,常用)
    常用元字符 解释
    . 匹配单个字符
    + 匹配前一个字符1次或多次
    ? 匹配前一个字符0次或1次
    * 匹配前面所有字符0次或多次
    - 区间,匹配区间内字符或数字
    [] 匹配方括号内任意字符,[a-zA-Z0-9]除此之外,还可以匹配不在区间范围内的字符^5
    ^ 匹配起始位置
    $ 匹配字符串结束
    将元字符转义成普通字符 ^ []
    {} 重复次数
    | 表示或
    () 分组,看成一个整体
    d 匹配一个数字字符,等价于[0-9]
    D 匹配一个非数字字符,等价于[^0-9]
    s 匹配任意空白字符,包括空格,制表符,换页符,等价于[f v]
    S 匹配任意非空字符,等价于[^f v]
    w 匹配包括下划线的任何单词字符,等价于[a-zA-Z0-9_]
    W 匹配任何非单词字符,等价于[^a-zA-Z0-9]

    正则练习

    1.匹配字符串中的数字one1two2three3

    答案:d

    2.字符串a{4} 结果什么

    答案:a4次

    3.正则:c|d 匹配字符串abcd 结果是什么

    答案:c或者d

    4.正则:(ab) 匹配字符串 abd adc abb 结果是什么

    答案:ab ab

    5.字符串 ['AD123456','ac123456','AB12345'] 正则匹配2个大写字母+6个数字

    [A-Z]{2}[0-9]{6}

    4.python中正则相关函数

    函数 说明
    compile(pattern) 创建正则表达式的规则对象
    match(pattern,string) 用正则表达式匹配字符串,成功返回匹配对象,否则返回None
    search(pattern,string) 搜索字符串中第一次出现正则表达式的模式,成功返回匹配对象,否则返回None
    split(pattern,string,maxsplit=0) 用正则表达式指定的模式分隔符拆分字符串,返回列表
    sub(pattern,repl,string) 用指定的字符串替换原字符串中与正则表达式匹配的模式,可以用count指定替换的次数
    fullmatch(pattern,string) match函数的完全匹配,从字符串开头到结尾
    findall(pattern,string) 查找字符串所有与正则表达式匹配的模式,返回字符串的列表
    import re
    
    print('match 从起始开始匹配')
    print(re.match('www', 'www.com'))
    # 返回一个对象 <re.Match object; span=(0, 3), match='www'>
    print(re.match('www', 'www.com').group())
    # 需要group转化一下, 返回 www
    print(re.match('www', 'com.www'))
    # 起始位置没有www,不匹配返回 None
    
    print('search 只返回第一个匹配的')
    print(re.search('www', 'http://www').group())
    # 返回www
    print(re.search('www', 'http://www.com.www').group())
    # 返回www
    
    print('findall,从左到右,按顺序返回匹配列表,无匹配返回空列表')
    print(re.findall('d', 'one1two2three3'))
    # 返回 ['1','2','3']
    print(re.findall('d', 'onetwothree'))
    # 返回 []
    print(re.findall('four', 'onefourtwofour'))
    # 返回 ['four','four']
    
    print('sub 替换')
    print(re.sub('g..t', 'zhangsan', 'grrt 1gbbt2 gc3ct', ))
    # 找到有gt的进行替换,且中间只有两个单字符 返回 zhangsan 1zhangsan2 gc3ct
    
    print('split 切割')
    print(re.split('+', '123+456*789'))
    # 按照+号进行切割 进行转义 返回 ['123','456*789']
    
    print('compile 创建匹配规则对象')
    # compile 先进行了编译速度会更快一些
    pattern = re.compile('[a-zA-Z]')
    # 先创建匹配对象
    result = pattern.findall('a1Bc_Z2yW')
    # 再进行正则匹配 也可以直接用findall
    print(result)
    # 返回 ['a', 'B', 'c', 'Z', 'y', 'W']
    
    

    5.贪婪匹配和非贪婪匹配

    test
    遇到以下两种正则,结果是什么
    <.*>
    贪婪从'<'开始到'>'结束,拿取所有的字符
    答案:<div><span>test</div></span>
    <.*?>
    非贪婪从'<'开始到'>'结束,'?'匹配前一个字符1次或者0次;一次一次的匹配
    答案:<div>
    <span>
    </div>
    </span>
    
  • 相关阅读:
    【Leetcode】155: 最小栈(Python)
    【深入理解计算机系统】 八:AVR汇编语言
    【深入理解计算机系统】 七:AVR指令集架构
    【深入理解计算机系统】 六:AVR架构和运行环境
    nginx+lua 记一次特殊字符导致"丢包"问题
    python2.7 升级到 python3.6
    神奇的 SQL 之擦肩而过 → 真的用到索引了吗
    神奇的 SQL 之 HAVING → 容易被轻视的主角
    Delphi
    Windows authentication in linux docker container(转发)
  • 原文地址:https://www.cnblogs.com/zhangshan33/p/11977777.html
Copyright © 2011-2022 走看看