美文网首页
day_18正则表达式

day_18正则表达式

作者: 逆流而上_2eb6 | 来源:发表于2018-10-23 19:01 被阅读0次

    1.正则表达式

    1.1作用

    正则表达式是用来匹配或描述字符串的工具
    1.判断输入的字符串是否符合要求,如是否是邮箱/手机号码
    2.提取满足条件的内容
    3.字符串替换

    1.2 re模块

    python中通过re模块中相应的方法来支持正则表达式的匹配、查找何替换功能from re import fullmatch
    fullmatch(正则表达式,字符串)--->判断正则表达式和字符串是否完全匹配
    正则表达式字符串:就是一个字符串,字符串中是正则表达式语法
    正则表达式中包含2个部分:一个是正则表达式对应的字符,一个是普通字符

    r = r"\wdk"
    print(fullmatch(r,"1dk"))
    

    re.fullmatch(re_str,str),完全匹配,不完全匹配时返回None

    1.3正则表达式语法

    用r阻止转义

    . :匹配一个任意字符 r"a.b"
    \w:匹配一个字母数字下划线,r"a\wb" acb,a_b,a9b
    \W:匹配非字母数字下划线
    \s:匹配一个不可见字符,空格,制表符,回车
    \S:匹配非空白字符
    \d:匹配一个数字字符
    \D:匹配非数字字符
    \b:检查\b出现的位置是否是一个单词边界,只是检查,不代表字符,\b左右不是单词边界就是None.如ab\bds。是单词边界:ab\b ds
    \B:检查是否不是单词边界
    单词边界:字符串开始结束,空格,换行,标点符号,把2个单词隔开的字符就是单词边界
    ^:检查字符串开头
    $:检查字符串结尾
    [字符集]:匹配一个字符,这个字符是中括号中的任意一个字符:r"[abc]abc" aabc,babc,cabc
    [字符1-字符2]匹配一个字符,这个字符的Unicode编码值中字符1和2之间
    字符1的unicode比字符2 的小。
    [1-3]ab 1ab 2 ab 3ab
    中文Unicode范围:4E00-9FA5
    "-”不放在2个字符之间就是“-” r"sdk-"
    [^字符集]:匹配一个不再字符集中的任意字符
    注意:^必须放在中括号最前面才有效

    1.4次数相关符号

    * :匹配0次或多次,*前要有一个字符。\d*kkdj
    +:匹配一次或多次,前面要有一个字符,\d+kdj
    ?:匹配一次或0次。 a?123
    {N}:匹配N次 \w{10}
    {M,N}:匹配M到N次
    {M,}:至少匹配M次
    {,N}:最多匹配N次

    1.5分支和分组

    分支:条件一|条件二--->先用条件一去匹配,如果失败,就用条件二。
    abc(ab|dh|sjf)
    ()分组:
    a.组合:将括号中的内容作为一个整体进行操作
    b.捕获:使用带括号的正则表达式匹配成功后,只获得括号中的内容
    c.重复:在正则表达式中可以通过\数字n来重复前面第n个()中匹配到的结果

    import re
    r = r"(a)-(b)(c)(\1\2)23"
    print(re.fullmatch(r,"a-bcab23"))
    

    转义字符
    正则表达式可以在特殊符号前加\,来让特殊的符号没有意义
    注意在中括号中不用转义,就表示该符号,例外的是 “\”和“-”,要用\,-转义

    import re
    r = r"[3\-5\\]"
    print(re.fullmatch(r,"-"))
    print(re.fullmatch(r,"\\"))
    print(re.fullmatch(r,"3"))
    

    1.6 re模块中的函数

    ** compile(正则表达式字符串):** 将正则表达式字符串转换成正则表达式对象
    fullmatch(正则表达式字符串,字符串):用正则表达式去完全匹配整个字符串,返回匹配对象;
    match()
    span ()获取匹配成功的下标(4,9)4开始,有4,没有9。
    print(result.span())
    group()获取完全匹配的匹配结果
    group(index>0)获取正则表达式中第index个分组匹配到的结果
    `print(result.group())
    string:获取被匹配到的原字符串
    search(正则表达式,字符串):查找字符串中满足正则表达式的第一个字符,返回第一个匹配结果,或者None
    findall(正则表达式,字符串)--->获取字符串中满足正则表达式的所有子串。如过正则表达式中有分组,取值的时候只取分组中匹配到的结果 ,如果有多个分组,会将每个分组作为一个元祖的元素

    import re
    r = r"(\d)k(\d)"
    s1 = "2k1j32j3k5j5"
    print(re.findall(r,s1))
    #[('2', '1'), ('3', '5')]
    

    finditer(正则表达式,字符串):查找所有满足正则条件的子串,返回的是迭代器,迭代器中的元素是匹配对象
    split(正则表达式,字符串): 将字符串按照满足正则表达式的子串进行分割
    sub(正则表达式,repl ,字符串): 将字符串中满足正则表达式的子串替换成repl
    .+?:用尽可能少.的匹配

    相关文章

      网友评论

          本文标题:day_18正则表达式

          本文链接:https://www.haomeiwen.com/subject/ctaazftx.html