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

最新文章

  1. 箭头函数和Buffer对象
  2. K型热电耦高精度分段线性拟合(C语言)
  3. oracle xmltype导入并解析Excel数据 (四)特别说明
  4. 转-JS子窗口创建父窗口操作父窗口
  5. 自定义NavigationView's item 的高度
  6. C语言陷阱——类型转换
  7. jquery.ajax异步发送请求的简单测试
  8. UICollectController
  9. dubbo学习汇总
  10. 【Visual Studio 扩展工具】使用ComponentOne中的GroupDefinition和SortDefinition属性保存和还原布局
  11. Appium-两个小报错
  12. url中传递中文参数时的转码与解码
  13. hdu-1042(大数+万进制)
  14. Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法
  15. mybatis 针对SQL Server 的 主键id生成策略
  16. HBase性能优化方法总结(二):写表操作
  17. win10系统中UserManager 总是被禁用怎么解决?
  18. Mybatis入门和简单Demo
  19. 微信证书 javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
  20. 时钟晶振32.768KHz为什么是15分频?

热门文章

  1. 【二叉堆】k路归并问题(BSOJ1941)
  2. 20145229吴姗珊 《Java程序设计》两天小总结
  3. 20145229吴姗珊《Java程序设计》第二周学习总结
  4. Unity Json解析IPA
  5. expr 数字操作
  6. C语言链表结构体(学习笔记)
  7. vue-mixins使用注意事项和高级用法
  8. 关于MFC中重载函数是否调用基类相对应函数的问题
  9. Uva 10820 Send a Table(欧拉函数)
  10. Mybatis学习--Sql语句构建器