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