1. 使用find()方法

>>> text = ‘yeah, but no, but yeah, but no, but yeah‘

>>> text.find(‘no‘)

10

2. 使用re.match()

对于复杂的匹配需要使用正则表达式和re 模块。为了解释正则表达式的基本原理,假设想匹配数字格式的日期字符串比如11/27/2012 ,可以这样做:

>>> text1 = ‘11/27/2012‘

>>> text2 = ‘Nov 27, 2012‘

>>>

>>> import re

>>> # Simple matching: \d+ means match one or more digits

>>> 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

3.将字符串预编译re.compile(),再match()

如果想使用同一个模式去做多次匹配,应该先将模式字符串预编译为模式对象。比如:

>>> 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

4.使用findall()方法

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

>>> text = ‘Today is 11/27/2012. PyCon starts 3/13/2013.‘

>>> datepat.findall(text)

[‘11/27/2012‘, ‘3/13/2013‘]

5. .group()方法去捕获分组

在定义正则式的时候,通常会利用括号去捕获分组。比如:

>>> datepat = re.compile(r‘(\d+)/(\d+)/(\d+)‘)

捕捕获分组可以使得后面的处理更加简单,因为可以分别将每个组的内容提取出来。

比如:

>>> m = datepat.match(‘11/27/2012‘)

>>> m

<_sre.SRE_Match object at 0x1005d2750>

>>> # Extract the contents of each group

>>> 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

6. 迭代方式返回finditer()

findall() 方法会搜索文本并以列表形式返回所有的匹配。如果你想以迭代方式返

>>> for m in datepat.finditer(text):

... print(m.groups())

...

(‘11‘, ‘27‘, ‘2012‘)

(‘3‘, ‘13‘, ‘2013‘)

核心步骤就是先使用re.compile() 编译正则表达式字符串,然后使用match() , findall() 或者finditer() 等方法。

7. 精确匹配

如果你想精确匹配,确保你的正则表达式以$ 结尾,就像这么这样:

>>> datepat = re.compile(r‘(\d+)/(\d+)/(\d+)$‘)

>>> datepat.match(‘11/27/2012abcdef‘)

>>> datepat.match(‘11/27/2012‘)

<_sre.SRE_Match object at 0x1005d2750>

>>>

8.简单的文本匹配/搜索

最后,如果你仅仅是做一次简单的文本匹配/搜索操作的话,可以略过编译部分,直接使用re 模块级别的函数。比如:

>>> re.findall(r‘(\d+)/(\d+)/(\d+)‘, text)

[(‘11‘, ‘27‘, ‘2012‘), (‘3‘, ‘13‘, ‘2013‘)]

>>>

但是需要注意的是,如果你打算做大量的匹配和搜索操作的话,最好先编译正则表达式,然后再重复使用它。模块级别的函数会将最近编译过的模式缓存起来,因此并会消耗太多的性能,但是如果使用预编译模式的话,将会减少查找和一些额外的处理损耗

python精确匹配字符串_Python: 字符串搜索和匹配,re.compile() 编译正则表达式字符串,然后使用match() , findall() 或者finditer() 等方法...相关推荐

  1. python基础教程十进制_Python基础教程(五):数字、字符串

    Python 数字 Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. 以下实例在变量赋值时数字对象将被创建: var1 = 1 ...

  2. python中re模块_python中re模块的使用以及一些正则表达式的总结

    一.re模块的使用-常用方法 match(pattern, string, flags = 0) 从string的第一个字符来匹配.如果匹配成功,返回匹配对象,否则返回None,匹配结果可以用grou ...

  3. python匹配部分字符串_python – 即使只是部分匹配字符串,如何匹配字符串?

    我有两个列表,我想比较,如果有任何匹配(即使是部分),然后执行一些操作.我已经设置了这个测试代码: keywords = ['social media','social business','soci ...

  4. python随机数列表变成字符串_Python循环、随机数、列表、元组、字符串、集合、jieba分词...

    Python中的循环 while循环: while 循环条件: (4个空格)循环体 计算1-100 之间的累加和 sum_num = 0 i = 1 while i <= 100: #对coun ...

  5. python.集合转列表_python 列表,元组,字典,集合,字符串相互转换

    本文主要介绍列表,元组,字典,集合以及和字符串之间的相互转换. 1. 列表与元组的互换 # 将列表转化为元组 li = [1, 2, 3] t = tuple(li) print(t, type(t) ...

  6. python的for语句写新的字符串_Python:for循环遍历对象,而不是字符串

    我过去常常pd.GetDummies对我的分类变量进行热编码以用作预测变量.对于我的一些具有许多唯一值的列,我有许多新列,我正在尝试找到一种快速方法来为这些创建交互项.(我只想要我的列子集的交互,所以 ...

  7. python依次输入输出字符串_Python练习:输入一个字符串并输出该字符串中所有字符的组合,python...

    题目 输入一个字符串,输出该字符串中字符的所有组合.例如abc,它的组合有a.b.c.ab.ac.bc.abc. 第一种思路 使用递归求解,可以考虑长度为n的字符串中m个字符的组合,设为C(n, m) ...

  8. python查找文件内容_python实现搜索文本文件内容脚本

    本文介绍用python实现的搜索本地文本文件内容的小程序.从而学习Python I/O方面的知识.代码如下: import os #根据文件扩展名判断文件类型 def endWith(s,*endst ...

  9. python 模糊匹配 合并_Python Pandas模糊合并/匹配重复

    我目前有2个数据帧,1个用于捐赠者,1个用于筹款.理想情况下,我想要找到的是,如果有任何筹款人也捐赠,如果是的话,将一些信息复制到我的募捐人数据集(捐赠者姓名,电子邮件和他们的第一次捐赠).我的数据有 ...

最新文章

  1. java继承的知识点_Java知识点梳理——继承
  2. 汽车故障检测软件_汽车没故障,定期保养,为啥尾气检测通不过?老司机说出关键...
  3. SAP CRM WebClient UI点了产品主数据搜索结果超链接后的跳转调试
  4. Python嵌套列表解析式(又称列表推导式)写法剖析与应用举例
  5. 蒸汽管道图纸符号_蒸汽管道疏水阀图标怎么画法
  6. linux path 文件,linux基础,文件目录管理,PATH,cp,mv,cat
  7. 卸载抖音,迎接一大波正在路上的“抖音”!
  8. Java8-2-Lambda表达式实战-一句话实现Map中按照Value排序
  9. 老K整理|4月|物流技术圈职位招聘合集!
  10. MusicXML文档翻译(持续更新)
  11. css等比例分割父级容器(完美三等分)
  12. 国内常用开源镜像站点【推荐使用阿里巴巴开源镜像站】
  13. STM32涉及到的汇编基础知识
  14. CUDA编程学习笔记 之 页锁定内存(固定内存Pinned Memory)
  15. NUAA无线传感器网络 复习重点整理
  16. Mac安装truffle框架时出现✓ Preparing to download box ✖ Downloading Unbox failed! Error: connect的解决方法
  17. HarmonyOS/OpenHarmony 双击返回与退出App
  18. Android Device Monitor 工具位置
  19. php天气城市切换怎么实现,PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气网界面...
  20. dwr的使用和ajax的标签使用 (未读)

热门文章

  1. lion.ec开源框架简介(原创)
  2. 解决Rails找不到Javascript的错误
  3. Visual studio 2010 中文版安装Siverlight 5 beta tools 总结
  4. 世界末日倒计时 js代码
  5. 解决 vs2003 无法启动调试 没有正确安装调试器
  6. <matplotlib.lines.Line2D object at 0x7f68cfd5a2e8>终极解决办法
  7. JAVA基础之变量(数据类型及其转换)
  8. Win10启用linux子系统(Linuxer福利)
  9. Common Lisp环境篇(slime+sbcl)(零)
  10. fprintf fscanf等函数的用法