20210728


search 得到索引范围

原文地址: http://blog.csdn.net/djskl/article/details/44357389

这四个方法是从某个字符串中寻找特定子串或判断某个字符串是否符合某个模式的常用方法。

1、match
    re.match(pattern, string[, flags])

从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。

2、search

    re.search(pattern, string[, flags])

若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个。

3、findall

    re.findall(pattern, string[, flags])

返回string中所有与pattern相匹配的全部字串,返回形式为数组。

4、finditer

    re.finditer(pattern, string[, flags])

返回string中所有与pattern相匹配的全部字串,返回形式为迭代器。

若匹配成功,match()/search()返回的是Match对象,finditer()返回的也是Match对象的迭代器,获取匹配结果需要调用Match对象的group()、groups或group(index)方法。
group()、groups()与group(index)的区别,如下所示:

>>> import re
>>> s = ‘23432werwre2342werwrew’
>>> p = r’(\d*)([a-zA-Z]*)’
>>> m = re.match(p,s)
>>> m.group()
‘23432werwre’
>>> m.group(0)
‘23432werwre’
>>> m.group(1)
‘23432’
>>> m.group(2)
‘werwre’
>>> m.groups()
(‘23432’, ‘werwre’)
>>> m = re.findall(p,s)
>>> m
[(‘23432’, ‘werwre’), (‘2342’, ‘werwrew’), (’’, ‘’)]
>>> p=r’(\d+)’
>>> m=re.match(p,s)
>>> m.group()
‘23432’
>>> m.group(0)
‘23432’
>>> m.group(1)
‘23432’
>>> m.groups()
(‘23432’,)
>>> m=re.findall(p,s)
>>> m
[‘23432’, ‘2342’]

综上:
group():母串中与模式pattern匹配的子串;
group(0):结果与group()一样;
groups():所有group组成的一个元组,group(1)是与patttern中第一个group匹配成功的子串,group(2)是第二个,依次类推,如果index超了边界,抛出IndexError;
findall():返回的就是所有groups的数组,就是group组成的元组的数组,母串中的这一撮组成一个元组,那一措组成一个元组,这些元组共同构成一个list,就是findall()的返回结果。另,如果groups是只有一个元素的元组,findall的返回结果是子串的list,而不是元组的list了。

例子

s =“1113446777”
用正则表达式把s分为1111, 3, 44, 6, 777

>>> import re
>>> s=‘1113446777’
>>> m = re.findall(r’(\d)\1*’,s)
>>> print m
[‘1’, ‘3’, ‘4’, ‘6’, ‘7’]
>>> m = re.search(r’(\d)*’,s)
>>> m.group()
>>> m=re.search(r’(\d)\1*’,s)
>>> m.group()
‘111’
>>> m.groups()
(‘1’,)
>>> m.group(0)
‘111’
>>> m.group(1)
‘1’
>>> m.group(2)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
IndexError: no such group
>>> m=re.finditer(r’(\d)\1*’,s)
>>> m.next().group()
‘111’
>>> m.next().group()
‘3’
>>> m.next().group()
‘44’
>>> m.next().group()
‘6’
>>> m.next().group()
‘777’
>>> m.next().group()
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
StopIteration

另一个例子:

>>> p = r’(\d)\1+([a-zA-Z]+)’
>>> s = ‘1111werwrw3333rertert4444’
>>> p = r’(\d)\1+([a-zA-Z]*)’
>>> import re
>>> re.findall(p,s)
[(‘1’, ‘werwrw’), (‘3’, ‘rertert’), (‘4’, ‘’)]
>>> m = re.search(p,s)
>>> m.group()
‘1111werwrw’
>>> m.group(1)
‘1’
>>> m.group(2)
‘werwrw’
>>> m.groups()
(‘1’, ‘werwrw’)
>>> m = re.finditer(p,s)
>>> m.next().group()
‘1111werwrw’
>>> m.next().group()
‘3333rertert’
>>> m.next().group()
‘4444’
>>> m.next().group()
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
StopIteration

分类: python 爬虫
<div id="blog_post_info">
好文要顶 关注我 收藏该文
xushukui
关注 - 4
粉丝 - 15
+加关注
0
0
<div class="clear"></div>
<div id="post_next_prev"><a href="https://www.cnblogs.com/nyist-xsk/p/7944434.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/nyist-xsk/p/7944434.html" title="发布于 2017-12-01 21:02">Ubuntu 16.04 几个国内更新源</a>
<br>
<a href="https://www.cnblogs.com/nyist-xsk/p/7993159.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/nyist-xsk/p/7993159.html" title="发布于 2017-12-06 15:59">常见http错误码</a>

注意:re.match( )方法匹配的是以xxx开头的字符串,若不是开头的,尽管属于str内,则无法匹配。

Python中re的match、search、findall、finditer区别正则相关推荐

  1. python while if 区别_对python中for、if、while的区别与比较方法

    如下所示: if应用举例: #if 若条件成立,只执行一次 #if 条件:如果条件成立,执行条件后的代码块内容,不成立,直接跳过代码块 #判断如果年龄age小于18,输出未成年 #=一个等号表示赋值的 ...

  2. Python中threading的join和setDaemon的区别及用法 例子

    Python中threading的join和setDaemon的区别及用法 Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别. 1.join ...

  3. python的none是什么-python中的null与none有什么区别

    Python中none与null的区别有:none可以看作是一个具体的值用来初始化变量,而null表示空不是一个值,并且没有与任何一个值绑定并且存储空间也没有存储值 Python中所有的操作都是针对对 ...

  4. Python基础学习-Python中最常见括号()、[]、{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho

    Python基础学习-Python中最常见括号().[].{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho ...

  5. python中_x、__x、__xx__的区别

    python中_x.__x.__xx__的区别 注释:该文章是从英文文档翻译过来的,具体代码可以参考原网址,这里只是简单解释一下他们的区别,方便大家迅速了解.原地址:difference-betwee ...

  6. Python中NaN、nan和NAN的区别及使用方法

    Python中NaN.nan和NAN的区别及使用方法 Python中的NaN(Not a Number)是一个特殊的浮点数值,用于表示非数值型计算结果或无限大的运算结果,常用于科学计算.数据分析等领域 ...

  7. Python学习笔记(一)1.Python中end=和sep=的用法与区别。

    一.Python中end=和sep=的用法与区别: python中常用到的end=和sep=两种参数用法相似,一个是python输出结尾,一个是python输出分割. end: 默认是换行,表示两个字 ...

  8. Python中最常见括号()、[]、{}的区别

    原文:https://www.cnblogs.com/xuxiaolu/p/4726064.html Python中最常见括号().[].{}的区别 在Python语言中最常见的括号有三种,分别是:小 ...

  9. python中 str 和 repr_python repr()与str()区别总结

    python中,用于将某一类型的变量或者常量转换为字符串对象的方法有两种,即repr()和str().但是他们在定义.面向对象.返回处理方式.字符串处理和输出目的都有很大的不同,本文将做详细介绍. 1 ...

最新文章

  1. java项目中使用重定向返回字符串
  2. 初窥wireshark fiddler等抓包工具及部分实现分析
  3. Lintcode--3(366)--斐波那契数列
  4. node.js安装部署测试
  5. hdu1054(最小顶点覆盖)
  6. 188. 买卖股票的zui佳时机 IV(JavaScript)
  7. 《『若水新闻』客户端开发教程》——04.设计新闻分类UI(2)
  8. linux中通用GPIO接口的操作
  9. web安全day43:网络扫描和Nmap的使用
  10. Carthage的安装和使用
  11. 银监会再出新规!银行数据治理与监管评级挂钩
  12. 华为 5680 OLT native vlan配置方式
  13. python计算现场得分_如何使用Python(scikitlearn)计算factorananalysis得分?
  14. web前端开发10大战略性技术蓝图
  15. C++生成正态分布随机数
  16. Video.js使用教程(二)
  17. 无域名HTTP请求攻击分析
  18. HCIP第十二天VLAN实验
  19. 趣学数据结构 代码 自用
  20. 打游戏计算机 配置清单,组装电脑配置清单玩游戏用的

热门文章

  1. 2022-2028年中国柴油行业市场研究及前瞻分析报告
  2. c/c++ 如何输入带空格的字符串
  3. 第一个spring程序
  4. 【VB】学生信息管理系统6——错误调试
  5. TensorFlow+TVM优化NMT神经机器翻译
  6. nvGraph-NVIDIA图形库
  7. MLPerf Inference 0.7应用
  8. 用NVIDIA NsightcComputeRoofline分析加速高性能HPC的应用
  9. Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(andro
  10. css中的display属性之li元素