千锋的第十五天

2018-08-03  本文已影响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))
上一篇下一篇

猜你喜欢

热点阅读