美文网首页
字符串搜索和匹配

字符串搜索和匹配

作者: 逗比的一生 | 来源:发表于2019-11-13 14:45 被阅读0次

问题

你想匹配或者搜索特定模式的文本
对于复杂的匹配需要使用正则表达式和re模块。
但如果你想使用同一个模式去做多次匹配,你应该先将模式字符串预编译为模式对象。比如:

>>> text1 = '11/27/2012'
>>> text2 = 'Nov 27, 2012'
>>> import re
>>> datepat = re.compile(r'\d+/\d+/\d+')
>>> if datepat.match(text1): 
    ... print('yes')
    ... else: 
    ... print('no') 
    ... 
yes 
>>> if datepat.match(text2): 
    ... print('yes')
    ... else: 
    ... print('no') 
    ... 
no
>>>

match() 总是从字符串开始去匹配,如果你想查找字符串任意部分的模式出现位置,使用 findall() 方法去代替。比如:

>>> text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
>>> datepat.findall(text)
['11/27/2012', '3/13/2013']

在定义正则式的时候,通常会利用括号去捕获分组。捕获分组可以使得后面的处理更加简单,因为可以分别将每个组的内容提取出来比如:

>>> datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
>>> m = datepat.match('11/27/2012')
>>> m
<_sre.SRE_Match object; span=(0, 10), match='11/27/2012'>
>>> m.group()
'11/27/2012'
>>> m.group(0)
'11/27/2012'
>>> m.group(1)
'11'
>>> m.group(2)
'27'
>>> m.group(3)
'2012'
>>> m.groups()
('11', '27', '2012')
>>> month,day,year = m.groups()
>>> text
'Today is 11/27/2012. PyCon starts 3/13/2013.'
>>> datepat.findall(text)
[('11', '27', '2012'), ('3', '13', '2013')]
>>> for month,day,year in datepat.findall(text):
    print('{}-{}-{}'.format(year,month,day))

    
2012-11-27
2013-3-13
>>> month
'3'

findall() 方法会搜索文本并以列表形式返回所有的匹配。如果你想以迭代方式返回匹配,可以使用 finditer() 方法来代替,比如:

>>> for m in datepat.finditer(text): 
    ... print(m.groups()) 
    ... 
('11', '27', '2012') ('3', '13', '2013') 
>>>

相关文章

  • 【Python进阶】2.4字符串匹配和搜索

    2.4 字符串匹配和搜索 问题 你想匹配或者搜索特定模式的文本 解决方案 如果你想匹配的是字面字符串,那么你通常只...

  • 字符串搜索和匹配

    问题 你想匹配或者搜索特定模式的文本对于复杂的匹配需要使用正则表达式和re模块。但如果你想使用同一个模式去做多次匹...

  • 【Python进阶】2.5字符串搜索和替换

    2.5 字符串搜索和替换 问题 你想在字符串中搜索和匹配指定的文本模式 解决方案 对于简单的字面模式,直接使用 s...

  • Fiddler 与Charles接口代理

    Fiddler 匹配规则 前缀为“EXACT:”表示完全匹配(大小写敏感)无前缀表示基本搜索,表示搜索到字符串就匹...

  • 正则表达式初窥

    搜索字符串 match从头匹配 search匹配一次 findall查询所有 【finditer 迭代器形式...

  • re-正则表达式

    搜索匹配re.match #只匹配字符串的开始,不常用re.match(pattern, string, flag...

  • 【2017-08-23】字符串及文本的处理(二)

    字符串的搜索与替换 匹配或搜索特定模式的文本字符串方法str.find(substr) 主要为查找字符串中是否出...

  • 正则,UI

    new RegExp 全文搜索 /内容/ g 全文搜索 1、test 用法:正则.test(字符串) 匹配成功,就...

  • 算法之美-KMP快速串匹配

    串匹配算法也称作模式匹配算法,就是在目标字符串中查找子字符串,常用于文本搜索、入侵检测等领域,将目标字符串定义为T...

  • KMP算法理解与实现

    KMP算法——字符串匹配算法 Ep:如果给定两个字符串,规定(搜索的文章)是搜索串,(关键字)是模板串,例...

网友评论

      本文标题:字符串搜索和匹配

      本文链接:https://www.haomeiwen.com/subject/ebjhictx.html