【python cookbook】【字符串与文本】4.文本模式的匹配和查找
问题:按照特定的文本模式进行匹配或查找
解决方法:
1、简单的文字匹配,只需使用str.find()、str.startswith()、str.endswith()或类似的函数即可;
2、复杂的匹配,需要使用正则表达式以及re模块
>>> import re
>>> text1='11/23/2016'
>>> text2='Nov 23,2016'
>>> if re.match(r'\d+/\d+/\d+',text1):
print('yes')
else:
print('no') yes
>>> if re.match(r'\d+/\d+/\d+',text2):
print('yes')
else:
print('no') no
>>>
若针对同一模式做多次匹配,那么通常会先将正则表达式模式预编译成一个模式对象:
>>> text='today is 11/23/2016. Pycon starts 3/12/2013'
>>> datepat.findall(text) #如果要找到整个文本中所有匹配项应该使用findall(),match()总是尝试在字符串的开头找到匹配项
['11/23/2016', '3/12/2013']
>>> datepat.match(text)
>>> print(datepat.match(text))
None
>>>
findall()方法搜索整个文本并找出所有的匹配项然后将他们以列表的形式返回。若想以迭代的方式找出匹配项,可以使用finditer()方法。
当使用正则表达式时,通常会将部门模式用括号包起来的方式引入“捕获组”,它能简化后续对匹配文本的处理,因为每个组的内容都可以单独提取出来:
>>> datepat=re.compile(r'(\d+)/(\d+)/(\d+)') #引入“捕获组”
>>> m=datepat.match('11/23/2016')
>>> m
<_sre.SRE_Match object; span=(0, 10), match='11/23/2016'>
>>> m.group(0)
'11/23/2016'
>>> m.group(1) #组内元素单独提取出来
''
>>> m.group(2)
''
>>> m.group(3)
''
>>> m.group()
'11/23/2016'
>>> m.groups()
('', '', '')
>>> month,day,year=m.groups()
>>> month
''
>>> day
''
>>> year
''
>>> text
'today is 11/23/2016. Pycon starts 3/12/2013'
>>> datepat.findall(text)
[('', '', ''), ('', '', '')]
>>> for month,day,year in datepat.findall(text):
print('{}-{}-{}'.format(year,month,day)) 2016-11-23
2013-3-12
>>>
>>> for m in datepat.finditer(text):#使用迭代方式查找匹配项
print( m.groups()) ('', '', '')
('', '', '')
>>>
总之,若打算执行很多匹配或查找操作的话,首先用re.compile()对模式进行预编译,然后使用像match()、findall()、finditer()这样的方法做匹配和搜索。
补充:
注意match()只会检查字符串的开头,想要精确匹配的话,在模式中包含一个结束标记($)即可:
>>> datepat
re.compile('(\\d+)/(\\d+)/(\\d+)')
>>> m=datepat.match('abc11/23/2016defjh')
>>> print(m)
None
>>> datepat=re.compile(r'(\d+)/(\d+)/(\d+)$')
>>> datepat.match('11/23/2016defjh')
>>> datepat.match('11/23/2016')
<_sre.SRE_Match object; span=(0, 10), match='11/23/2016'>
>>>
若只是简单的执行文本匹配和搜索操作,通常可以省略预编译步骤:
>>> text
'today is 11/23/2016. Pycon starts 3/12/2013'
>>> re.findall(r'(\d+)/(\d+)/(\d+)',text)
[('', '', ''), ('', '', '')]
>>>
【python cookbook】【字符串与文本】4.文本模式的匹配和查找的更多相关文章
- python cookbook 字符串和文本
使用多个界定符分隔字符串 import re line = 'asdf fjdk; afed, fjek,asdf, foo' print(re.split(r'[;,\s]\s*', line)) ...
- python cookbook学习笔记 第一章 文本(1)
1.1每次处理一个字符(即每次处理一个字符的方式处理字符串) print list('theString') #方法一,转列表 结果:['t', 'h', 'e', 'S', 't', 'r', 'i ...
- python cookbook学习笔记 第一章 文本(2)
1.6合并字符串 ka=list('kaluoc') #字符串转成字符串列表 print ''.join(ka) #大量的字符串相连,join是最高效的 print '%s%s something % ...
- python书籍推荐:Python Cookbook第三版中文
所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/44/ 来源:python黑洞网 内容 ...
- python cookbook学习1
python cookbook学习笔记 第一章 文本(1) 1.1每次处理一个字符(即每次处理一个字符的方式处理字符串) print list('theString') #方法一,转列表 结果:['t ...
- 模板—字符串—AC自动机(多模式串,单文本串)
模板—字符串—AC自动机(多模式串,单文本串) Code: #include <queue> #include <cstdio> #include <cstring> ...
- python中使用%与.format格式化文本
初学python,看来零零碎碎的格式化文本的方法,总结一下python中格式化文本的方法.使用不当的地欢迎指出谢谢. 1.首先看使用%格式化文本 常见的占位符: 常见的占位符有: %d 整数 %f 浮 ...
- HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)
最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...
- Python:字符串
一.序列的概念 序列是容器类型,顾名思义,可以想象,“成员”们站成了有序的队列,我们从0开始进行对每个成员进行标记,0,1,2,3,...,这样,便可以通过下标访问序列的一个或几个成员,就像C语言中的 ...
随机推荐
- OpenGl的glMatrixMode()函数理解
glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项 ...
- Linux就这个范儿 第8章 我是Makefile
Linux就这个范儿 第8章 我是Makefile P287 Makefile的作用就是——自动化编译,一旦写好,只需要一个make命令(解析Makefile,执行Makefile中描述的操作),整个 ...
- Android --固定底部
相对布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...
- 第三篇 SQL Server代理警报和操作员
本篇文章是SQL Server代理系列的第三篇,详细内容请参考原文. 正如这一系列的上一篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行,除了步骤中执行的工 ...
- [PCL]NDT点云匹配方法
测试NDT方法的Demo,http://pointclouds.org/documentation/tutorials/normal_distributions_transform.php#norma ...
- ORA-16179: incremental changes to "log_archive_dest_1" not allowed with SPFILE
SQL> alter system set log_archive_dest_1='E:\arch ' scope=both; alter system set log_archive_dest ...
- UIButton详解
// ----------------------------------UIButton------------------------------ // UIButtonTypeSystem 点击 ...
- Java基础之写文件——在通道写入过程中的缓冲区状态(BufferStateTrace)
控制台程序,在Junk目录中将字符串“Garbage in, garbage out\n”写入到名为charData.txt的文件中. import static java.nio.file.Stan ...
- Leetcode: Graph Valid Tree && Summary: Detect cycle in undirected graph
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...
- java-语法
JAVA语法 1.标识符 1.定义:对各种变量.方法.类等进行命名的字符序列 2.规则:他的组成由字母.数字.$,数字不能出现在开始,不能和关键字重复,区分大小写 2.数据类型 1.分类 1基本数据类 ...