zoukankan      html  css  js  c++  java
  • re库的使用

    re库的使用

    精确匹配

    如果直接给出字符,就是精确匹配。用d可以匹配一个数字,w可以匹配一个字母或数字

    s1='00d'#可以匹配'007',但是匹配不了'00A'
    s2='ddd'#可以匹配'010'
    s3='www'#可以匹配'py3'
    s4='s'#空格
    

    匹配任意字符

    s1='py.'#'pyc','pyo','py2'
    

    匹配变长字符

    符号 功能
    * 任意个字符,包括0个
    + 至少一个字符
    ? 0个或者1个字符
    {n} n个字符
    {n-m} n-m个字符

    匹配特殊的符号

    #010-12345
    s='d{3}-d{3,8}'#-是特殊字符要加转义
    

    表示范围

    []表示范围

    字符串 表示
    [0-9a-zA-Z_] 匹配一个数字,字母或者下划线
    [0-9a-zA-Z_]+ 至少匹配一个由数字、字母或者下划线所组成的字符串
    [a-zA-Z_][0-9a-zA-Z_]* 字母开头,数字或字母或下划线构成的字符串
    AlB 匹配A或者B
    ^ 行的开头,^/d必须以数字开头
    $ 行的结束,d$表示以数字结尾

    Re模块

    判断是否匹配

    转义的问题

    s='ABC\-001'#python的字符串
    #对应的正则表达式字符串变成
    #'ABC-001'
    
    #不考虑转义问题
    s=r'ABC-001'
    # 对应的正则表达式字符串不变:
    # 'ABC-001'
    
    

    判断是否匹配

    test = '用户输入的字符串'
    if re.match(r'正则表达式', test):
        print('ok')
    else:
        print('failed')
    

    切分字符串

    >>>s='a b  c'
    >>>re.split(r's+',s)
    >>>['a','b','c']
    >>>s='a,b;; c d'
    >>>re.split(r'[s\,;]+',s)
    >>>['a','b','c']
    

    分组

    ()代表了分组

    ^(d{3})-(d{3,8})$

    >>> m = re.match(r'^(d{3})-(d{3,8})$', '010-12345')
    >>> m
    <_sre.SRE_Match object; span=(0, 9), match='010-12345'>
    >>> m.group(0)
    '010-12345'
    >>> m.group(1)
    '010'
    >>> m.group(2)
    '12345'
    
    

    注意到group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。

    贪婪匹配

    正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。

    >>>re=match(r'^(d+)(0*)$','102300').groups()
    >>>('102300','')
    

    由于d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。
    必须让d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来。
    加个?就可以让d+采用非贪婪匹配

    >>> re.match(r'^(d+?)(0*)$', '102300').groups()
    ('1023', '00')
    
  • 相关阅读:
    JMeter网站测试分析
    JMeter元件的作用域和执行顺序
    JMeter脚本录制
    认识Jmeter工具
    Fiddler 只取所需
    Fiddler设置代理(PC和Android)
    Fiddler获取https会话
    Fiddler 你需要了解的
    关于excel的导入导出
    第十章、random模块
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11590572.html
Copyright © 2011-2022 走看看