码迷,mamicode.com
首页 > 其他好文 > 详细

重修课程day17(正则表达式)

时间:2017-09-11 19:43:38      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:...   一个   day   常用操作   迭代   pil   字符串分割   没有   结束   

一 正则表达式和re模块

 1 什么叫做正则表达式:这则表达式是字符串的一种筛选规则

 2 正则表达式的好处:1,1匹配:检测字符串是否符合正则表达式的规则,否则返回False。

           1,2 切割:按照一定的规则将字符串分割成多个字符串。

           1,3替换:将字符串中的字符替换成指定的字符。

           1,4获取:获取与规则子符相符的字符: 步骤:① 将正则封装成正则;② 正则表达式和要操作的字符相关联,获得匹配对象;③ 获取正则表达式的匹配引擎;④ 通过引擎对福和规格的字符进行操作。

 正则里的一些常用操作:

  1 字符集:.(点) 匹配除换行符以外的任意字符

       \w :匹配字母,数字和下划线; \W匹配非字母,数字和下滑线

       \s:匹配任意的空白符 ; \S:匹配非空白符

       \d:匹配数字;   \D:匹配非数字

       \n:匹配一个换行符  ;\t:匹配制表符

       \b:pipe欸一个单词的结尾

       ^ :匹配字符串的开始位置; $:匹配字符串的结束位置

       |:匹配字符串的或  ;  ():匹配括号内的表达式,也表示是一个组,还可以取名可以控制多个字符出现的次数,只需要为想要匹配的内容进行分组。

       [...]:匹配字符组中的字符 ;[^...]:匹配非字符组中的字符。

  2 量词:  * :匹配零次到n次

       + :匹配一次到n次

       ?:匹配零次或者一次

      { }:自定义次数  {n}:n次  {n,}:n到无限次;{n,m}:n到m次

    每个量词控制着前一个字符的出现次数

  3 非贪婪匹配:

   什么是贪婪匹配:在匹配时,按照最多的匹配,能匹配多少就匹配多少。

   什么是非贪婪匹配:在匹配中,按照最少的匹配。关键字?:就是在匹配的字符后面加上?(问号),这个问号就是匹配的最少。

  4 转义符:\:将一些普通的字符加上\会有特殊的意义,同时将特殊的符号可以加上\,变成普通的字符。

    r:在字符串的前面加上r,特殊的符号也会变成字符串中的字符。

 re模块里的常用操作:

  findall:有几个就匹配几个,以列表的格式返回没有返回的内容,就会返回一个空的列表,优先匹配分组,加上?:取消优先匹配。

print(re.findall(‘\d+‘,‘432j5h52klk‘))

  search:返回匹配到的第一个福和规则的字符,必须要用group来调用


# print(re.search(‘fa.‘,‘sddasfanewvgfsfang‘).group())

  match:只能去匹配第一个,有符合规则就返回,没有就会报错。也要用group来调用。

# print(re.match(‘f.‘,‘fangdsfdskjiefang‘).group())   #正确
# print(re.match(‘f.‘,‘dufdfangewfang‘).group())  #报错

  split:分割:以规格匹配的内容为分隔符,如果加上()分组,还会显示分割符。

# print(re.split(‘fang‘,‘yifangjie‘))
# print(re.split(‘(fang)‘,‘yifangjie‘))

  sub:替换:还可以指定替换的的次数

# print(re.sub(‘jie‘,‘fang‘,‘jiejiefangjieyi‘))   #不指定次数,默认只要符合规则就替换
# print(re.sub(‘jie‘,‘fang‘,‘jiejiefangjieyi‘,2))   #指定替换词数

  subn:替换:返回符合规则的字符,同时还回替换次数。

# print(re.subn(‘jie‘,‘fang‘,‘fangjiejiefangyijei‘))

  compile:将正则表达式编译,同时可以多个同时调用。

# ret=re.compile(‘\d{5}‘)
# print(ret.findall(‘dsa543545dsfrdadf452423‘))
# print(ret.findall(‘faf32225vsdf56556354gdsd‘))

  finditer:返回一个迭代器。

# ret=re.finditer(‘\d{3,7}‘,‘sdfdas1453cdsf2423423‘)
# for i in ret:
#     print(i.group())

重修课程day17(正则表达式)

标签:...   一个   day   常用操作   迭代   pil   字符串分割   没有   结束   

原文地址:http://www.cnblogs.com/fangjie0410/p/7506045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!