问题:按照特定的文本模式进行匹配或查找

解决方法:

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.文本模式的匹配和查找的更多相关文章

  1. python cookbook 字符串和文本

    使用多个界定符分隔字符串 import re line = 'asdf fjdk; afed, fjek,asdf, foo' print(re.split(r'[;,\s]\s*', line)) ...

  2. python cookbook学习笔记 第一章 文本(1)

    1.1每次处理一个字符(即每次处理一个字符的方式处理字符串) print list('theString') #方法一,转列表 结果:['t', 'h', 'e', 'S', 't', 'r', 'i ...

  3. python cookbook学习笔记 第一章 文本(2)

    1.6合并字符串 ka=list('kaluoc') #字符串转成字符串列表 print ''.join(ka) #大量的字符串相连,join是最高效的 print '%s%s something % ...

  4. python书籍推荐:Python Cookbook第三版中文

    所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/44/ 来源:python黑洞网 内容 ...

  5. python cookbook学习1

    python cookbook学习笔记 第一章 文本(1) 1.1每次处理一个字符(即每次处理一个字符的方式处理字符串) print list('theString') #方法一,转列表 结果:['t ...

  6. 模板—字符串—AC自动机(多模式串,单文本串)

    模板—字符串—AC自动机(多模式串,单文本串) Code: #include <queue> #include <cstdio> #include <cstring> ...

  7. python中使用%与.format格式化文本

    初学python,看来零零碎碎的格式化文本的方法,总结一下python中格式化文本的方法.使用不当的地欢迎指出谢谢. 1.首先看使用%格式化文本 常见的占位符: 常见的占位符有: %d 整数 %f 浮 ...

  8. HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)

    最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...

  9. Python:字符串

    一.序列的概念 序列是容器类型,顾名思义,可以想象,“成员”们站成了有序的队列,我们从0开始进行对每个成员进行标记,0,1,2,3,...,这样,便可以通过下标访问序列的一个或几个成员,就像C语言中的 ...

随机推荐

  1. C# base和this

    • 是否可以在静态方法中使用base和this,为什么? • base常用于哪些方面?this常用于哪些方面? • 可以base访问基类的一切成员吗? • 如果有三层或者更多继承,那么最下级派生类的b ...

  2. ie8兼容border-radius方法

    <!doctype html><html> <head>        <meta charset="utf-8" />    &l ...

  3. :first与:first-child的区别

    说的简单,:first表示单个元素,:fisrt-child表示的多个元素(集合). 如果追求深一点的话, 1.$(:first).css()表示全局或局部全局的第一个,也就是表示单个元素 2.$(: ...

  4. 我就是认真:Linux SWAP 深度解读(必须收藏)

    我就是认真:Linux SWAP 深度解读(必须收藏) http://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660097& ...

  5. 解决 SVN cleanup 任务中断导致无法 update

    解决 SVN cleanup 任务中断导致无法 update 今天在更新 svn 时, TortoiseSVN 一直在提示要进行 cleanup ,而执行 cleanup 时又提示: Cleanup ...

  6. 阻止PHP彩蛋信息泄漏 [转]

    Easter Eggs(复活节彩蛋)外行人估计不了解这是神木玩意,彩蛋的网络解释是:用于电脑.电子游戏.电脑游戏.影碟或其他互动多媒体之中的隐藏功能或信息.PHP包含一个安全漏洞,可能导致未经授权的信 ...

  7. OC类方法和实例方法中的self区别

    OC类方法和实例方法中的self Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenien ...

  8. 读取plist

    - (NSArray *)imageData { if (_imageData == nil) { // 从未初始化 // 初始化数据 // File : 全路径 // NSBundle : 一个NS ...

  9. 根据执行计划优化sql语句

    优化前:表连接使用merge SQL> alter session set statistics_level=all; Session altered. SQL> select e.sal ...

  10. v$osstat

    SQL> select * from v$osstat; STAT_NAME VALUE OSSTAT_ID COMMENTS CUM ----------------------------- ...