知识储备:

\w 匹配任何字母/数字,下划线

正则表达式进阶:

re.match('com', 'comwww.runcomoob')
re.search('\dcom', 'www.4comrunoob.5com')
一旦匹配成功,就返回一个match object 对象,对象拥有下列方法;
group() 返回被re 匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置(返回结果是索引加1,和分片一样,不包括组的结束位置)
span() 返回一个元组包含匹配(开始,结束)的位置

match() 只匹配起始位置

s = re.match('com', 'www.runcoomoob')
print(s) #None
print(s.span()) #注意位置,不是0-3 Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/laonanhai/day6_test/s9.py", line 15, in <module>
print(s.span()) #注意位置,不是0-3
AttributeError: 'NoneType' object has no attribute 'span'
search() 注意前面的找到则不再往后找
s2 = re.search('com', 'www.runcomoocomb')
print(s2)
#<_sre.SRE_Match object; span=(7, 10), match='com'> 注意前面的找到则不再往后找

sub/subn 替换  re.sub(pattern, repl, string, max)   max 最大替换次数

s3 = re.sub("g.t", "have", "I get A, I got B, I gut C", 2)
print(s3) #I have A, I have B, I gut C s4 = re.subn("g.t", "have", "I get A, I got B, I gut C")
print(s4) #('I have A, I have B, I gut C', 2) 多了替换次数

 re.split()  分割

s5 = re.split('\d+', 'one1two2three3four4')
print(s5) #['one', 'two', 'three', 'four', ''] 注意最后是''

  把那些经常使用的正则表达式编译成正则表达式对象,可以提高一定的效率!

text = 'JGood is a handsome boy, he is cool, clever, and so on...'
regex = re.compile(r'\w*oo\w*') #regex 是对象
print(regex.findall(text)) #['JGood', 'cool']

正则分组

正则分组:去已经匹配到的数据中再匹配数据(这句话超超重要!!)
举例:

# 无分组
origin = "has fkdghggfhh"
r = re.match("h\w+", origin)
print(r.group()) # 获取匹配到的所有结果
print(r.groups()) # 获取模型中匹配到的分组结果
print(r.groupdict()) # 获取模型中匹配到的分组结果 # has
# ()
# {}
import re

m = re.search("(?P<year>[0-9]{4})", "test 2017abc")
print(m)
print(m.group())
print(m.groups())
print(m.group("year"))

输出:

<_sre.SRE_Match object; span=(5, 9), match=''>
2017
('',)
2017
search()  分组和match()一样,只是找的方式不同
# search()  分组也一样,只是找的方式不同
origin = "has fkdghggfhh"
r = re.match("h(?P<name>\w+)", origin) #给字典添加key,注意括号!!
print(r.group()) # 获取匹配到的所有结果
print(r.groups()) # 获取模型中匹配到的分组结果
print(r.groupdict()) # 获取模型中匹配到的分组中所有执行了key的组 # has
# ('as',)
# {'name': 'as'}

下面是示例,自己看看肯定看得懂的啦


origin = "has fkdghggfhh hal"
#r = re.findall("(h\w+)", origin) #无用分组 ['has', 'hggfhh', 'hal']
#r = re.findall("h(\w+)", origin) #只拿分组里面的东西 ['as', 'ggfhh', 'al']

origin = "hasbbcc fkdghggbbccfhhbbcc halbbcc"
r = re.findall("h(\w+)bbc", origin) #['as', 'ggbbcfhh', 'al']
r = re.findall("h(\w+)b(bc)c", origin)
print(r) #[('as', 'bc'), ('ggbbccfhh', 'bc'), ('al', 'bc')]
 

接下来讲一个蛮重要的点

split() 与正则分组

# 无分组
origin = "hello alex bcd alex lge alex acd 19"
r = re.split("alex", origin, 1)
print(r) #['hello ', ' bcd alex lge alex acd 19']
# 有分组
origin = "hello alex bcd alex lge alex acd 19"
r1 = re.split("(alex)", origin, 1)
print(r1) #['hello ', 'alex', ' bcd alex lge alex acd 19']
r2 = re.split("al(ex)", origin, 1) #重要
print(r2) #['hello ', 'ex', ' bcd alex lge alex acd 19']

欢迎转发!
This is zcl‘s article! Thanks for your support!
文章出处:http://www.cnblogs.com/0zcl
作者:zcl

最新文章

  1. LeetCode 344. Reverse String
  2. unslider的用法详解
  3. Uva 10167 - Birthday Cake 暴力枚举 随机
  4. MyBatis&lt;forEach/&gt;如何遍历Map参数里的值
  5. 新增的html5中js获取方法
  6. linux驱动开发之HelloWorld
  7. Self referencing loop detected with type
  8. OC-之AFNetworking与ASIHTTPRequest对比
  9. 经典.net面试题目(1)
  10. 【shell编程基础1】shell变量篇
  11. MapReduce运行流程分析
  12. Android进阶:七、Retrofit2.0原理解析之最简流程【上】
  13. js自执行事件
  14. eolinker——添加项目成员
  15. 文件上传时出现 Processing of multipart/form-data request failed. Unexpected EOF read on the socket错误
  16. 封装的mybatis连接类
  17. 2016年3月8日Android实习日记
  18. html5-section元素
  19. XSS绕过学习
  20. mongodb常用查询

热门文章

  1. 【记录】从客户端()中检测到有潜在危险的 Request.Path 值。
  2. 【记录】ASP.NET MVC JsonResult JsonRequestBehavior AllowGet
  3. 记录 android 开发的一个 &quot;面试&quot; 问题
  4. C++ 制作 json 数据 并 传送给服务端(Server) 的 php
  5. objective-c 语法快速过(7)编译器特性ARC
  6. ReactJS分析之入口函数render
  7. HTML5 视频(二) &lt;video&gt; 使用 DOM 进行控制
  8. BroadcastReceiver注册、使用及其权限
  9. js实现String.Fomat
  10. 【集合框架】JDK1.8源码分析之Comparable &amp;&amp; Comparator(九)