美文网首页
day17-正则表达式

day17-正则表达式

作者: 71a5d7e107e5 | 来源:发表于2018-11-27 20:40 被阅读0次

    01-基本符号

    1.什么是正则

    正则表达式就是一个字符匹配的工具;
    是由正则符号和普通字符组成,来匹配不同规律的字符

    2.Python队正则表达式的支持

    Python中提供了一个re模块,用来支持正则表达式
    fullmatch(正则表达式,字符串)-用正则表达式去匹配字符串,如果匹配成功返回匹配结果,失败返回none
    Python中正则表达式的写法:将正则内容写在字符串中,一般在这个字符串前面加r/R

    import re
    1普通字符

    普通字符在表达式中代表字符本身

    re_str = r'abc'
    result = re.fullmatch(re_str,'abc')
    print(result)
    

    2 .- 匹配任意字符

    在正则表达式中, .出现的位置,可以匹配一个任意字符
    注意:一个点只能匹配一个字符

    p匹配长度为三的字符串,中间是任意字符

    re_str = r'a.c'
    result = re.fullmatch(re_str,'a#c')
    print(result)
    

    3 \w-匹配字母数字下划线

    在正则表达式中,\w出现的位置,可以匹配一个任意字母数字或者下划线(其实也可以匹配Unicode编码中除了阿斯科码剩下的部分)
    注意:
    一个\w只能匹配一个字符
    中文也可以匹配

    re_str = r'\wab.'
    result = re.fullmatch(re_str,'5abe')
    print(result)
    

    4 \s - 匹配空白字符

    包括:空格、缩进、制表符和换行符(\r ,\t,\n,空格)

    re_str = r'\w\w\s\s..'
    result  = re.fullmatch(re_str,'sf\n\ten')
    print(result)
    

    5 \d - 匹配数字字符

    re_str = r'\d\d\d..'
    result = re.fullmatch(re_str,'644du')
    print(result)
    

    \b - 检测单词边界

    注意:\b 是检测其出现的位置是否是单词边界,不会对字符进行匹配。
    当正则表达式中出现了\b,匹配的时候去掉\b,匹配成功后再看其出现的位置是否是单词边界

    单词边界:单词开头,单词结尾、标点符号、空白符号(只有能将单词区分开的符号都属于单词边界)

    匹配字符串'hello,world',并且要求w 前面是单词边界,h前面也是单词边界

    re_str = r'\bhello,\bworld'
    result = re.fullmatch(re_str,' hello,wolrd')
    

    7 ^ - 检测字符串开头

    在match和fullmatch中没有意义,search、findall等中有意义

    re_str = r'^the'
    result = re.fullmatch(re_str,'the')
    

    8 $ -检测字符串结尾

    在match和fullmatch中没有意义,search、findall等中有意义

    re_str = r'the$'
    result = re.fullmatch(re_str,'the56')
    

    9 \大写字母 - 对应的功能是\小写字母的功能取反

    \W \D \S \B

    字符集

    1.普通字符集
    列如:【abc】- 匹配一个字符是a或b或c

    注意:一个中括号只能匹配一个字符
    正则中有特殊功能的单个符号,在中括号中表示其本身(.$^+*|)
    匹配字符的组合 符号在中括号中保持原有功能\w \b \d \s \W \D \S \B

    re_str = r'\d[abcd]'
    result = re.fullmatch(re_str,'8d')
    print(result)
    

    2.[字符1-字符2]-表示字符1 到字符2(要求:字符1的编码制要小于字符2)
    [a-z] - 匹配所有小写字母
    [A-Z] - 匹配所有大写字母
    [a-zA-Z] - 匹配所有字母
    [1-7] - 数字字符1到7
    [\u4e00-\u9fa5] - 匹配所有中文
    re_str = r'[a-z]'

    11 [^字符集]-匹配不在字符集中的任意一个

    [^abc]-匹配除了abc以外的任意一个字符
    [^\d]-匹配除了数字字符以外的任意一个字符
    [^a-z]-匹配除了小写字母以外的任意一个字符

    re_str = r'[^abc]'
    result = re.fullmatch(re_str,'f')
    print(result)
    

    02-正则控制匹配次数

    import re

    1* - 匹配0次或者多次

    a* - a出现0次或多次,'','a','aaa'...都可以匹配
    \d* - 任意数字出现0次或多次'','1''23'...都可以
    [abc]* - a或b或c
    [a-z]* -

    注意:在[]外面的*前面需要一个字符或一个匹配字符的符号

    print(re.fullmatch(r'a*b','aaab'))
    print(re.fullmatch(r'[a-z]*''sdwefrefefw'))
    

    + 匹配一次或多次

    a+ a至少出现一次
    \d+ 数字至少出现一次

    3.? 匹配0次或一次

    a? a出现0次或一次

    匹配一个整数
    re_str = r'[+-]?[1-9]\d*'

    4{}

    {N} - 匹配n次,a{3}:匹配3个a
    {M,N}-匹配M-n次 a{3,5} - 三个或四个或五个a
    {,N} - 最多N次(0-n)
    {m,}-至少m次

    密码:字母和数字组成,数字不开头,6-12位
    re_str = r'[A-Za-z][\dA-Za-z]{5-11}'

    03-分支、捕获和贪婪

    import re

    1.分支

    条件1 | 条件2 - 匹配条件1或条件2
    \d{2} | [a-z] - 两个数字字符或者一个小写字母
    a\d{2} | \w{2} - a后两个数字或者两个数字字母下划线

    注意:正则中的分支也会出现短路,当条件1可以匹配,就不会在使用条件2匹配

    匹配所有的数,包括正负小数和零

    re_str = r'[+-]?[1-9]\d*[.]?\d*|[+-]?0[.]\d+|0'
    print(re.fullmatch(re_str,'2'))
    

    2 () - 捕获和分组

    分组 - 将括号中的类容作为一个整体

    'abc123'
    'abcAJS'
    re_str = r'abc(\d{3}|[A-Z]{3})'
    RE = r'(\d[a-z]){3}'#数字小写字母出现三次
    

    捕获
    通过正则获取符合条件的字串的时候,可以在正则表达式中加括号,匹配后取值只取括号中内容

    re.findall(正则表达式,字符串) - 在字符串中找所有符合正则表达式的结果,返回列表
    取值只取括号中内容

    重复匹配
    带多个分组的正则表达式可以在分组后面通过添加\数字来重复前面第几个分组中匹配的内容

    说明:\数字 - 代表前面第几个分组;\1代表第一个分组

    re_str = r'\d{3}([a-z]{2})a\1'
    print(re.fullmatch(re_str,'235heahe'))
    

    3.贪婪

    匹配次数后加?就是贪婪匹配:*? +? ?? {m,n}? -表示尽可能少的重复

    4.转义符号

    \w + * ? ( ) [^ -]
    在正则表达式中偶特殊意义或特殊功能的符号前加\来取消其特殊意义
    \w - 代表两个字符,分别是\ 和w
    + 代表+字符
    * 代表*字符

    04-re模块

    import re

    1.compile

    compile(正则表达式) - 将正则表达式转换成正则表达式对象
    转换成对象后可以通过对象调用对象方法

    re_str = '\d{3}'

    2.macth/fullmacth

    fullmatch(正则表达式,字符串)-完全匹配,从开头到结尾
    match(正则表达式,字符串)-不完全匹配,只匹配开头

    匹配成功返回匹配对象,失败返回none

    匹配对象
    1.获取span - 匹配到的内容的范围,(开始下标,结束下标),结束下标取不到
    匹配对象.span()-获取整个正则表达式匹配的范围
    匹配对象.span(n)-获取整个正则表达式第n个分组匹配到的范围

    2.start和end - 获取匹配结果的开始下标和结束下标
    匹配对象.start()/匹配对象.end() - 获取匹配结果的开始下标和结束下标
    匹配对象.start(n)/匹配对象.end(n)-获取整个正则表达式第n个分组匹配到的开始下标和结束下标

    3.group - 获取匹配到的内容
    匹配对象.group()-获取整个正则表达式匹配的内容
    匹配对象.group(n)-获取整个正则表达式第n个分组匹配到的内容

    4.string - 获取用来匹配的原字符串
    匹配对象.string

    3.search

    search(正则表达式,字符串)-匹配字符串中第一个满足正则表达式的字串,匹配成功返回匹配对象,不成功返回none
    有多个只匹配第一个

    4.split

    split(正则表达式,字符串)-在字符串中按照满足正则表达式的字串对字符串进行切割
    返回值是个列表

    5.sub

    sub(正则表达式,新字串,字符串)-用新串替换字串,返回一个替换后的字符串

    6.findall

    findall(正则表达式,字符串)-在字符串中获取满足正则表达式的所有字符,返回一个列表,元素是字符串

    注意:如果正则表达式中有一个分组,结果是表达式中那个分组匹配到的结果
    如果表达式中分组个数大于1,结果是一个列表,元素是元组,元组中内容是匹配到的内容

    6.finditer

    finditer(表达式,字符串)- 获取字符串中表达式的内容,返回一个迭代器,元素是匹配对象

    相关文章

      网友评论

          本文标题:day17-正则表达式

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