美文网首页
千锋的第十五天

千锋的第十五天

作者: 堪怜咏絮才 | 来源:发表于2018-08-03 20:29 被阅读59次

    一、正则表达式的符号

    正则表达式:用来做字符串查找、匹配、切割用的一种工具
    正则表达式:是一个符合正则规范的字符串
    match:从开始匹配,成功则停止------部分匹配
    fullmatch:用整个字符串去匹配------完全匹配

    1. 点(.) :匹配一个任意字符
    2. \w :匹配一个字符是字母、数字或下划线(w---word)
    3. \s :匹配一个空白字符(空格,换行,制表符)(s----space)
    4. \d :匹配一个数字字符(d-----digital)
    5. \b :检测边界(字符串开头,字符串结尾都是边界,边界指的是单词边界---一般的符号都可以作为单词边界)(b-----边界)
    6. ^ :检测字符串开始(The-----匹配以The开头的字符串)(检测开头)
    7. :检测字符串结束-------(-----检测结尾)
    8. \W :匹配非字母、数字、下划线-------(\W---匹配非字母数字下划线
    9. \S :匹配非空白字符
    10. \D :匹配非数字
    11. \B :检测非边界

    二、正则表达式的符号组合

    1. [] :匹配[]中出现的任意一个字符(只能一个)
      [0-9]:匹配0,1,2,3,4,5,6,7,8,9中的任意一个数字
      [0-8]:匹配0,1,2,3,4,5,6,7,8中的任意一个数字
      [a-z]:匹配任意一个小写字母
      [A-Z]:匹配任意一个大写字母
      [a-zA-Z]:匹配所有的字母
    2. [^] :匹配不在[]中出现的任意一个字符
      • :匹配0次或者多次
      • :匹配一次或者多次
    3. ? :匹配0次或者1次
    4. {N} :匹配N次
    5. {N,} :匹配大于等于N次
    6. {M,N} :匹配至少M次,最多N次
    7. | :分支(相当于or)
    8. () :匹配的时候是分组,让括号中的正则条件变成一个整体
      正则中:. \ [] {} () * + ? ^ | $,这些字符有特殊意义,所以在正则表达式中,如果想要单纯的表达这些字符,需要在前面加'';

    注意:1. - 号在中括号中可能是特殊符号,需要加
    2. . {} () * + ? $ | 在中括号中可以不加\,来表示字符
    \N----->匹配前面第N个组中匹配到的内容(将第N组的内容重复一遍)

    三、模块方法

    1. compile() 将正则表达式字符串转换成正则表达式对象
      转换成正则表达式对象后,可以通过对象调用相关的方法
    2. fullmatch(正则表达式,字符串)完全匹配,从开始匹配到结尾
      返回值是匹配对象,如果失败返回None
    3. match(正则表达式,字符串)不完全匹配,从字符串开头开始匹配,匹配到正则表达式的范围为止
      返回值是匹配对象,如果匹配失败返回None
      4.search(正则表达式,字符串)在指定的字符串中查找某种字符串(以正则表达式来描述) 如果有多个满足条件的,只匹配第一个,返回值是匹配对象
      返回值是匹配对象,如果找不到符合要求的返回None
      5.findall(正则表达式,字符串)获取指定字符串中满足正则条件的所有的字符串
      返回值是列表,列表中是符合要求的字符串.没有满足要求的字符串就返回空的列表[]
      6.finditer(正则表达式,字符串)用法和findall一样,只是返回值的类型不一样
      返回一个迭代器,迭代器中的内容是匹配对象
      注意:()捕获部分无效
      7 . split(正则表达式,字符串)按正则表达式匹配到的字符串进行切割
      返回值是列表,列表元素就是切割后被分段的字符串
    4. sub(正则表达式,新字符串,原字符串) 在原字符串中查找符合正则的子串替换成新的字符串
      返回值是替换后的字符串

    作业

    ⼀.获取字符串中:

    a.所有的正整数

    b.所有的负整数

    c.所有的浮点数

    d.所有的⾮负浮点数

    import re
    str1 = '5hjfka154hbjkafdv4665sh&&^%$n,nfkalfnf'
    re_str1 = r'[+]?[1-9]\d*'
    result1 = re.findall(re_str1,str1)
    print(result1)
    
    re_str2 = r'[-][1-9]\d*'
    str2 = '-456sjkfh-645()(&&ak-jsn-5553'
    result2 = re.findall(re_str2,str2)
    print(result2)
    
    re_str3 = '[+-]?\d+.\d+'
    str3 = 'hsk+41.85hjkdi-15561.51(*&^%$$-5661.56'
    result3 = re.findall(re_str3,str3)
    print(result3)
    
    re_str4 = '[+]?\d+.\d+'
    str4 = '+356.332ufhkfh-6468.16joijf64615'
    result4 = re.findall(re_str4,str4)
    print(result4)
    结果:['5', '154', '4665']
    ['-456', '-645', '-5553']
    ['+41.85', '-15561.51', '-5661.56']
    ['+356.332', '6468.16', '64615']
    
    1. 能够完全匹配字符串“(010)-62661617”和字符串“01062661617”的正则表达式包括()
      A. “(?\d{3})?-?\d{8}”
      B. “[0-9()-]+”
      C. “[0-9(-)]\d”
      D. “[(]?\d[)-]\d*”
      答案:A、B、D
    2. 能够完全匹配字符串“c:\rapidminer\lib\plugs”的正则表达式包括()
      A. “c:\rapidminer\lib\plugs”
      B. “c:\rapidminer\lib\plugs”
      C. “(?i)C:\RapidMiner\Lib\Plugs” ?i:将后⾯的内容的⼤写变成⼩写
      D. “(?s)C:\RapidMiner\Lib\Plugs” ?s:单⾏匹配
      答案:D(因为匹配\要用两个\才能够实现)
    3. 能够完全匹配字符串“back”和“back-end”的正则表达式包括()
      短路操作:前⾯的为真了,就不会再执⾏后边的操作
      A. “\w{4}-\w{3}|\w{4}”
      B. “\w{4}|\w{4}-\w{3}”
      C. “\S+-\S+|\S+”
      D. “\w\b-\b\w|\w*”
      答案:A、B、C
    4. 能够完全匹配字符串“go go”和“kitty kitty”,但不能完全匹配“go kitty”的正则表达式包括()
      :\1就是重复前⾯第⼀个()/组合⾥⾯的内容
      : \2就是重复前⾯第⼆个()/组合⾥⾯的内容
      A. “\b(\w+)\b\s+\1\b”
      B. “\w{2,5}\s*\1”
      C. “(\S+) \s+\1”
      D. “(\S{2,5})\s{1,}\1”
      答案:A、C、D
    5. 能够在字符串中匹配“aab”,⽽不能匹配“aaab”和“aaaab”的正则表达式包括()
      A. “a*?b”
      B. “a{,2}b”
      C. “aa??b”
      D. “aaa??b”
      答案:B、C、D
      """三.观察下⾯双引号内的⽂本”中⽂名 ⻉拉克·侯赛因·奥巴⻢ 外⽂名 Barack Hussein Obama II 别 名 欧巴⻢ 国
      籍美国 ⺠ 族 德裔族 出⽣地 美国夏威夷州檀⾹⼭ 出⽣⽇期 1961年8⽉4⽇ 职 业政治家、律师、总统 毕业院
      校哥伦⽐亚⼤学,哈佛⼤学 信 仰新教 主要成就 1996年伊利诺伊州参议员 主要成就美国第56届、 57届总统
      2009年诺⻉尔和平奖获得者 时代周刊年度⻛云⼈物2008、 2011 任期内清除本·拉登 代表作品 《我相信变⾰》《我⽗亲的梦想》《⽆畏的希望》 所属政党美国⺠主党 ⾎ 型 AB型 学 院⻄⽅学院 妻 ⼦⽶歇尔·拉沃恩·
      奥巴⻢ 性 别 男”
      a. (此题为示范题)当使⽤正则表达式“中⽂名\s+(\S+)\s+”抽取美国总统奥巴⻢的中⽂名时,替换字符
      串“1”的赋值为需要抽取的中⽂名。 b. 当使⽤正则表达式“___________”抽取美国总统奥巴⻢的外⽂名时,替换字符串“1”的赋值为需要抽取的
      外⽂名。
      c. 当使⽤正则表达式“___________________________”抽取美国总统奥巴⻢的出⽣⽇期时,替换字符
      串“1”的赋值为需要抽取的出⽣⽇期。 d. 使⽤正则表达式“_________________________”抽取美国总统奥巴⻢的职业时,替换字符串“1”的赋值
      为需要抽取的职业。
      e. 使⽤正则表达式“___________________________”抽取美国总统奥巴⻢的主要成就时,替换字符
      串“1”的赋值为需要抽取的主要成就。 f. 使⽤正则表达式“______________________________”抽取美国总统奥巴⻢的妻⼦姓名时,替换字符 串“1”的赋值为需要抽取的姓名。"""
      import re
      str1 = "中⽂名 ⻉拉克·侯赛因·奥巴⻢ 外⽂名 Barack Hussein Obama II 别 名 欧巴⻢ 国
      籍美国 ⺠ 族 德裔族 出⽣地 美国夏威夷州檀⾹⼭ 出⽣⽇期 1961年8⽉4⽇ 职 业政治家、律师、总统 毕业院
      校哥伦⽐亚⼤学,哈佛⼤学 信 仰新教 主要成就 1996年伊利诺伊州参议员 主要成就美国第56届、 57届总统
      2009年诺⻉尔和平奖获得者 时代周刊年度⻛云⼈物2008、 2011 任期内清除本·拉登 代表作品 《我相信变⾰》《我⽗亲的梦想》《⽆畏的希望》\ 所属政党美国⺠主党 ⾎ 型 AB型 学 院⻄⽅学院 妻⼦ ⽶歇尔·拉沃恩·
      奥巴⻢ 性 别 男"
    re_str1 = r'\b[a-zA-Z]* [a-zA-Z]* [a-zA-Z]* II'
    result1 = re.findall(re_str1,str1)
    print(re.sub(result1[0],'$1',str1))
    
    re_str2 = r'\d{4}\S\d+\S\d+\S'
    result2 = re.findall(re_str2,str1)
    print(re.sub(result2[0],'$1',str1))
    
    re_str3 = r'\S{3}、\S{2}、\S{2}'
    result3 = re.search(re_str3,str1)
    print(re.sub(result3.group(),'$1',str1))
    
    result4 =re.split(r'[教代]',str1)
    str2 = result4[1]+'代'+result4[2]
    print(re.sub(str2,'$1',str1))
    
    re_str4 = r'\S{3}·\S{3}·'
    result5 = re.findall(re_str4,str1)
    print(re.sub(result5[1],'$1',str1))
    

    相关文章

      网友评论

          本文标题:千锋的第十五天

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