知识储备:

\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

python之(re)正则表达式下的更多相关文章

  1. python基础之正则表达式

    正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...

  2. python之(re)正则表达式上

    python正则表达式知识预备 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表 ...

  3. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  4. python的re正则表达式模块学习

    python中re模块的用法   Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...

  5. Python基础之 正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  6. Python系列之正则表达式详解

    Python 正则表达式模块 (re) 简介 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用 ...

  7. 【转载】Python中的正则表达式教程

    本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...

  8. Python中的正则表达式教程

    本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...

  9. [Python]网络爬虫(七):Python中的正则表达式教程

    转自:http://blog.csdn.net/pleasecallmewhy/article/details/8929576#t4 接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一 ...

随机推荐

  1. 高级javascript---模块化编程

    随着网站逐渐变成“互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者不得不使用软 ...

  2. 【记录】xUnit for vs2012/vs2013

    关于 NUint 以及单元测试的相关内容,可以参考:[单元测试]NUint使用详解及Visual Studio配置. xUnit 是 NUint 的进化版本,使用方法和 NUint 类似,首先下载安装 ...

  3. 机器学习基础——梯度下降法(Gradient Descent)

    机器学习基础--梯度下降法(Gradient Descent) 看了coursea的机器学习课,知道了梯度下降法.一开始只是对其做了下简单的了解.随着内容的深入,发现梯度下降法在很多算法中都用的到,除 ...

  4. 在本地测试一次成功的AJAX请求

    要在本地测试AJAX,首先是环境的搭建,下面以wamp为例. 1.先在wamp的官网下载wamp的安装包,网址 http://www.wampserver.com/. 2.安装wamp.如果安装过程中 ...

  5. Compute Resource Consolidation Pattern 计算资源整合模式

    Consolidate multiple tasks or operations into a single computational unit. This pattern can increase ...

  6. CSS基础知识汇总

    前言 原文连接:http://www.cnblogs.com/wanghzh/p/5805678.html 在此基础上又做了大量的扩充 CSS简介 CSS是Cascading Style Sheets ...

  7. 程序集与反射技术(C#)

    首先我们来看程序集,程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件(例如可执行文件.exe和类库文件.dll).由于程序集在编译后并不一定会生成单个文件,而可能会生 ...

  8. 实战 ASP.NET Web API

    Web API 框架是一个面向 Http 协议的通信框架.相对于 WCF 而言,Web API 只面向于 Http 协议设计,而且没有 WCF 那么繁琐的配置.Web API 的开发类似于 ASP.N ...

  9. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [二] 基本使用

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 使用环境 Visual Studio 2015 or later .NET 4 ...

  10. ubuntu入门

    Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音.了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:) 大多数的美国人读 ubun ...