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

正则表达式&re模块

时间:2017-06-27 17:03:05      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:调用   指定   att   失败   find   正则表达式   ==   转义   表示范围   

正则表达式:
功能:字符串模糊匹配查询
元字符:. ,^, $, *, +, ?, {}, [ ],| ( ),\
  • . 通配符点:匹配除换行符以外的任意一个符号
  • ^:只匹配字符串的开始位置
  • $:只匹配字符串的末尾位置
  • *: 重复(0,+∞)
  • +:重复 [1,+∞)
  • ?:重复 [0,1]
  • {}:重复指定次数{m,n}
\:转义符
     转义符跟元字符,元字符变普通符号
     转义符加普通符号,有特殊含义
  • \d  0-9任意数字
  • \D  非数字
  • \w 任意字母数字 [azAZ0-9-]
  • \W 非数字字母
  • \s  空格
  • \b  匹配特色字符边界,比如空格,&,#等
\b在assic码里是响铃符
>>> re.findall(rc\\l,abc\le)
[c\\l]
>>> re.findall(c\\\\l,abc\le)
[c\\l]
>>> re.findall(c\\\l,abc\le)
[c\\l]
>>> 
 
[ ]字符集:多选一,“或”
字符集中只有三个特殊符号: - ^ \ 
  • - :表示范围
  • ^:取反
  • \:转义符依然有效
管道符:|  或
re.findall(‘-?\d+\.?\d*‘,‘234,-45,8.9,-7.9,6‘)
 
贪婪匹配:按规则尽可能多多匹配内容
>>> import re
>>> res=re.findall(abc+,abcccccdvd)
>>> print(res)
[abccccc]
非贪婪模式:在规则后加’?’ 切换成非贪婪模式,在该模式下,按着最小重复数匹配

s="<div>yuan<img></div><a href=""></div>"
#
# ret=re.findall("<div>.*?</div>",s) # <div>yuan<img></div><a href=></div>
# print(ret)

# ret=re.search("<div>.*?</div>",s) # <div>yuan<img></div><a href=></div>
# print(ret)

几个常用的非贪婪匹配Pattern
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
.*?的用法:
--------------------------------

. 是任意字符
* 是取 0 至 无限长度
? 是非贪婪模式。
何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?a

就是取前面任意长度的字符,到底一个 a 出现
 
Re模块
():
分组
  分组后查找后只显示分组里的内容
  显示全部的内容在分组括号里加上’?:’
有名分组:
 res=re.search((?P<year>20\d{2})-(?P<mouth>[01]\d),2014-08)
>>> res.group(year)
2014
>>> res.group(mouth)
08

re.findall(pattern, str,flag)

===>结果是个列表
===>优先筛选(分组的情况)
 
Re.search(pattern, str,flag)
==>只匹配第一个符合条件
==>匹配成功,返回对象。匹配失败,返回None
 
Re.match(pattern, str,flag)
==>只从开始位置匹配符合条件
==>匹配成功,返回对象。匹配失败,返回None
 
re.split(pattern,str,max)
Max:最大分割次数
 
re.compile(pattern,flag)编译 返回一个可调用的对象
 obj=re.compile("\d+") ret=obj.findall("akhsd4325asdk43")   #  re.findall("\d+","") print(ret)

Re.finditer( )  返回迭代器对象

# ret=re.finditer("\d+","dasfjk324khk4234kj234hkj234hkj234kj234k2j34hk2j3h4")
# print(ret)
#
# print(next(ret).group())

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

正则表达式&re模块

标签:调用   指定   att   失败   find   正则表达式   ==   转义   表示范围   

原文地址:http://www.cnblogs.com/mona524/p/7085982.html

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