Python 正则表达式 — findall()方法

重点 findall()方法的使用 — 程序讲解

简单的符号的使用

正则表达式的库文件是re,先导入库文件:

import re

.的使用举例

# -?- coding: utf-8 -?-
import re a = 'abca123'
b = re.findall('a.', a)
print(b)

输出

['ab', 'a1']

.是一个占位符,我们将程序改成下面这个样子,再试试看:

# -?- coding: utf-8 -?-
import re a = 'abca123'
b = re.findall('a..', a)
print(b)

输出

['abc', 'a12']

所以,几个.,就表示会面保留几位。

*的使用举例

# -?- coding: utf-8 -?-
import re a = 'abca123'
b = re.findall('a*', a)
print(b)

运行

['a', '', '', 'a', '', '', '', '']

?的使用举例

# -?- coding: utf-8 -?-
import re a = 'abca123'
b = re.findall('a?', a)
print(b)

运行

['a', '', '', 'a', '', '', '', '']

组合的符号的使用

.*的使用举例

# -?- coding: utf-8 -?-
import re secret_code = 'sdajksdhfakjldooxxIxxoosdsdsdmknmdsdooxxamxxoodsddjksdjooxxAoboxxoodsddsddkjlooxxSirxxoosjdlsjl' b = re.findall('ooxx.*xxoo', secret_code )
print(b)

运行

['ooxxIxxoosdsdsdmknmdsdooxxamxxoodsddjksdjooxxAoboxxoodsddsddkjlooxxSirxxoo']

.*得到最多的匹配结果。我先解释一下上面为什么会得到这样的结果。程序将第一个ooxx和最后一个xxoo视为一组ooxx.*xxoo.*使用贪心算法,能找多少找多少,只要能满足条件,反正就是越多越好。

.*?的使用举例

# -?- coding: utf-8 -?-
import re secret_code = 'sdajksdhfakjldooxxIxxoosdsdsdmknmdsdooxxamxxoodsddjksdjooxxAoboxxoodsddsddkjlooxxSirxxoosjdlsjl' b = re.findall('ooxx.*?xxoo', secret_code )
print(b)

运行

['ooxxIxxoo', 'ooxxamxxoo', 'ooxxAoboxxoo', 'ooxxSirxxoo']

.*?使用非贪心算法,和上面.*形成对比。

()的使用举例

# -?- coding: utf-8 -?-
import re secret_code = 'sdajksdhfakjldooxxIxxoosdsdsdmknmdsdooxxamxxoodsddjksdjooxxAoboxxoodsddsddkjlooxxSirxxoosjdlsjl' b = re.findall('ooxx(.*?)xxoo', secret_code )
print(b)

运行

['I', 'am', 'Aobo', 'Sir']

当我们需要的内容,我们就使用()给括上。

我先来讲一个关于\n换行符的正则表达式的知识点:

# -?- coding: utf-8 -?-
import re secret_code = '''sdajksdhdlsjlooxxhello
xxoodsdsdooxxworldxxoodfsdf'' b = re.findall('ooxx(.*?)xxoo', secret_code )
print(b)

运行

['world']

我们希望得到的结果是['hello', 'world']

代码应该这样改:

# -?- coding: utf-8 -?-
import re secret_code = '''sdajksdhdlsjlooxxhello
xxoodsdsdooxxworldxxoodfsdf'' b = re.findall('ooxx(.*?)xxoo', secret_code, re.S )
print(b)

运行

['hello\n', 'world']

再来看看下面这个:

# -?- coding: utf-8 -?-
import re secret_code = 'dsdxx1xxdsdfxx2xxdfsdxx3xxdlrelxx4xxeuwuxx5xxnjkjh' b = re.findall('xx(.*?)xxdsdfxx(.*?)xx', secret_code )
print(b)
print(b[0][0])

运行

[('1', '2')]
1

看到没有,找到的结果是列表[])里面包着元组())。如果你想单独打印'1'这个结果,你需要这样指定:b[0][0]


参考网站:

http://www.jikexueyuan.com/course/777_2.html?ss=1

Learning Python 008 正则表达式-002 findall()方法的更多相关文章

  1. Learning Python 008 正则表达式-003 search()方法

    Python 正则表达式 - search()方法 findall()方法在找到第一个匹配之后,还会继续找下去,findall吗,就是找到所有的匹配的意思.如果你只是想找到第一个匹配的信息后,就不在继 ...

  2. Learning Python 008 正则表达式-003 sub()方法

    Python 正则表达式 - sub()方法 sub()方法 sub()方法:替换符合规律的内容,返回替换的值 # -?- coding: utf-8 -?- import re secret_cod ...

  3. Learning Python 008 正则表达式-001

    Python 正则表达式 总结 这节课讲讲正真使用的技术 - 正真表达式. 文本爬虫 什么是正则表达式 正则表达式这个名词听起来就有一种很官方的感觉,但是它是一个很很很有用的技术.我用语言是不能形容它 ...

  4. python中正则表达式 re.findall 用法

    在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配. 其中,re.findall() 函数可以遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表. 在python源代码中 ...

  5. Python day20正则表达式和re方法

    元字符6个函数以及几个元字符1.'.'通配符2.'^'以什么开头3.'$'以什么结尾4.'*'紧挨着的字符0~∞次5.'+'紧挨着的字符1~∞次6.'?'紧挨的字符0次或1次7.'{}' {0,}== ...

  6. 正则表达式 re.findall 用法

    正则 re.findall 的简单用法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)语法: findall(pattern, string, flags=0) import ...

  7. python正则表达式(5)--findall、finditer方法

    findall方法 相比其他方法,findall方法有些特殊.它的作用是查找字符串中所有能匹配的字符串,并以结果存于列表中,然后返回该列表 注意: match 和 search 是匹配一次 finda ...

  8. Python正则表达式re.findall("[A-Za-z]([A-Za-z0-9])*[.]txt",'Abc2019.txt')的结果为什么是['9']

    在<Python妙用re.sub分析正则表达式匹配过程>中老猿分析了findall函数的返回情况,老猿前一阵子在执行这个语句时: >>> re.findall(" ...

  9. Python基于正则表达式实现文件内容替换的方法

    Python基于正则表达式实现文件内容替换的方法 本文实例讲述了Python基于正则表达式实现文件内容替换的方法.分享给大家供大家参考,具体如下: 最近因为有一个项目需要从普通的服务器移植到SAE,而 ...

随机推荐

  1. Tomcat的Server.xml虚拟主机和虚拟目录的配置

    以前开发JavaEE网站都布置在Tomcat下,布置目录一般为$CATALINA_HOME/webapps/WebName,所以要访问网站,则在http://localhost后必须要加上上下文路径( ...

  2. [原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. Python 3 并发编程多进程之进程与线程

    Python 3 进程与线程 进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的 ...

  4. rail模型

    rail是一种以用户为中心的性能模型,又google提出,其主要目标是让用户满意,主要分为response animation idle load四个部分 response 输入延迟时间小于100毫秒 ...

  5. Java 环境变量设置 -- JAVA_HOME CLASSPATH

    1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 ...

  6. 常见SQL函数需要注意的细节

    版权声明:本文为博主原创文章,未经博主允许不得转载. 这是一位牛人让我们思考的问题,说实话当时真蒙了,函数虽然明白,但细化到这种程度,真的是叫不准啊,下面是几道比较典型的问题,和本人做的实验,不一定准 ...

  7. uva 111 History Grading(lcs)

    题目描述 在信息科学中有一些是关于在某些条件限制下,找出一些计算的最大值. 以历史考试来说好了,学生被要求对一些历史事件根据其发生的年代顺序来排列.所有事件顺序都正确的学生无疑的可以得满分.但是那些没 ...

  8. 备忘录One

    1.POI操作excel技术博客记录 2.SSH框架搭建记录 3.SSM框架搭建记录 4.文件上传下载记录 5.面试题整理

  9. 微信非全屏播放设置(仅Iphone)

    由于微信X5内核强制视频全屏,用X5自带内核播放,一般内嵌视频打开播放就会被全屏. ihpone里面可以通过设置 x-webkit-airplay="true" webkit-pl ...

  10. SPOJ375Query on a tree I(树剖+线段树)(询问边)

    ιYou are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, ...