转自https://www.cnblogs.com/mosson/articles/5828433.html

match、search、findall、group(s) 区别

1

2

3

4

5

import re

# match findall经常用

# re.match() #从开头匹配,没有匹配到对象就返回NONE

# re.search() #浏览全部字符,匹配第一个符合规则的字符串

# re.findall() # 将匹配到的所有内容都放置在一个列表中

一、match有两种情况

-------  有分组 ------取匹配到的正则再次取其部分内容

1

2

3

4

5

6

origin = "hello alex sadf dsaf"

= re.match("(h)\w+",origin)

print(r.group())  # hello  获取匹配所有结果

print(r.groups())  #('h',)  #获取模型中匹配到的分组 没有分组则为空元组

= re.match("(?P<n1>h)(?P<n2>\w+)",origin)  #获取模型中匹配到的分组中所有执行力key的组 ?P<KEY>VALUE   {'n2': 'ello', 'n1': 'h'}

print(r.groupdict())   #?P<KEY>VALUE   {'n2': 'ello', 'n1': 'h'}

-------  无分组 ------

1

2

3

4

= re.match("h\w+",origin)

print(r.group()) # 获取匹配所有结果 hello

print(r.groups()) #获取模型中匹配到的分组 ()

print(r.groupdict())  #获取模型中匹配到的分组 {}

二、groups、group、groupdict

1

2

3

4

print(r.group())  # hello  获取匹配所有结果

print(r.groups())  #('h',)  #获取模型中匹配到的分组 没有分组则为空元组

= re.match("(?P<n1>h)(?P<n2>\w+)",origin)  #获取模型中匹配到的分组中所有执行力key的组 ?P<KEY>VALUE   {'n2': 'ello', 'n1': 'h'}

print(r.groupdict())   #?P<KEY>VALUE   {'n2': 'ello', 'n1': 'h'}

三、search两种情况

search 不用从开头匹配,而是匹配全局整个字符串,一旦又符合就退出

-------  有分组 ------

1

2

3

4

5

6

origin = "hello alex alix bcd dsfa lefg abc 199"

= re.search("a(\w+)",origin)

print(r.group()) #alex

print(r.groups()) #('lex',)

= re.search("(?P<key1>a)(?P<key2>(\w+))",origin)

print(r.groupdict()) #{'key1': 'a', 'key2': 'lex'}

-------  无分组 ------

1

2

3

4

5

origin = "hello alex alix bcd dsfa lefg abc 199"

= re.search("ali\w+",origin)

print(r.group()) #alix

print(r.groups()) #()

print(r.groupdict()) #{}

四、findall

# 1 匹配到之后,就抽离,继续从下一个字符开始匹配

1

2

3

origin = "a2b3c4d5"

a=re.findall("\d+\w\d+",origin)   #['2b3', '4d5']

print(a)

# 2 空值也会挨个字符去匹配,结尾后,还要继续多匹配一次

1

2

num = "asd"

print(re.findall("",num))  # ['', '', '', '']

# 无分组

1

2

3

4

5

origin = "hello alex alix bcd dsfa lefg abc 199"

print(re.findall("a\w+",origin)) # ['alex', 'alix', 'abc']

print(re.findall("(a\w+)",origin)) #['alex', 'alix', 'abc']

print(re.findall("a(\w+)",origin)) #组 groups ['lex', 'lix', 'bc']

print(re.findall("(a)(\w+)(x)",origin)) # [('a', 'le', 'x'), ('a', 'li', 'x')] 将 三个分组匹配到的做成元组 放到列表作为一个元素

findall  的特点

1

2

3

4

5

6

7

8

9

10

11

分组匹配

    * 贪婪匹配: 比如如下的asd 为一个分组,而一旦遇到asd开始的字符串,如果

后面还是asd也会匹配,这就是贪婪匹配。

    findall 特性:

        1 有几个分组返回几个内容:,并将返回内容放到元组内 作为列表的一个元素。

        2 即尽管* 匹配到了两个asd ,但是因为是贪婪虚拟匹配出的,有一个分组,所以,

        只会,取一个。

        3 而findall默认只取最后一组匹配的内容,故此 只返回最后一组asd

        4 findall 如果正则能有空的匹配的话,那么匹配字符串最后还会匹配到一个空

        5 多个分组匹配到做成元组,当成列表的一个元素

        6 多个分组,查找顺序,外到内,左到右 ((\w)(\w)){2,} 先是找到2个字母的,再在这两个字母里面进行局部分组

# 1 特性 1 2 3 4

1

print(re.findall(r'(asd)*','asdasd'))  #['asd', '']

# 2 如下,默认+可以第一次 就匹配到 1asd2asd 但由于前面只有1个分组,只能返回后面的4位了

1

2

= re.findall("(\dasd)+","1asd2asdp2asds"# ['2asd', '2asd']

print(n)

# 3 如下,默认*可以第一次 就匹配到 1asd2asd 但由于前面只有1个分组,只能返回后面的4位了

  #但是*还可以表示0次,故再遇到p的时候,空就能匹配了,而且,最后还有个s也匹配到空,结尾还默认还会匹配到空

1

2

= re.findall("(\dasd)*","1asd2asdp2asds"# ['2asd', '', '2asd', '', '']

print(n)

#4 匹配,最多四个字母,因此alex都找到了,但是只有一个分组,所以只返回最后一个\w故x

1

2

3

= "alex"

= re.findall("(\w){4}",a)

print(n)  # ['x']

#5 这里findall 匹配分组是一个字母匹配到了,而*是贪婪匹配,四个字母都匹配就取到了四个字母,而正则分组只有一个,因此只取最后一个

1

2

3

= "alex"

= re.findall("(\w)*",a)

print(n)  # ['x', '']

#6 由于从外到内, 所以匹配两个字母的 al 匹配到了,ex也匹配到了,外部分组1个,因此ex,而内部从左到右又会匹配。

1

2

3

= "alex"

= re.findall("((\w)(\w)){2,}",a)

print(n)  # [('ex', 'e', 'x')]

#7 会匹配ax alex alex acd 但是贪婪匹配的分组只有 1个 因此 ax ax ax ad

1

2

3

origin = "hello ax lex bed alex lge alex acd 19"

= re.findall("(a)(\w)*" , origin)

print(n)  #[('a', 'x'), ('a', 'x'), ('a', 'x'), ('a', 'd')]

Python match-search-findall-group(s)的区别相关推荐

  1. Python正则表达式:match(),search(),findall()与finditer()的用法

    https://blog.csdn.net/qq_39521554/article/details/79462405

  2. python re search match_简诉Python Re模块中re.search和re.match的区别

    先前的两篇文章<python re.match函数是什么,了解python match函数的使用>,<Python中的python re.search方法详解>,我们介绍了Py ...

  3. Python:正则表达式match、search、findall、finditer区别,group()、groups()与group(index)的区别

    1.match re.match(pattern, string[, flags]) 从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None, ...

  4. python中search和match的区别_Python中正则表达式match()、search()函数及match()和search()的区别详解...

    match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找 ...

  5. python中search用法_Python中的python re.search方法详解

    re.search扫描整个字符串并返回第一个成功的匹配,若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个 ...

  6. 正则表达式2--re方法--match()--search()

    1 ''' 2 match() 函数试图从字符串起始部分对模式进行匹 , 3 如果匹配成功,返回一个对象, 4 如果失败,返回 None, 5 匹配对象的 group() 方法能够用于显示那个成功的匹 ...

  7. Python中爬虫框架或模块的区别

    Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些. (1)爬虫框架或模块 Python自带爬虫模块:urllib.urllib2; ...

  8. Python中值传递和引用传递区别

    原文:http://blog.csdn.net/xuqiaobo/article/details/72236539 举例,函数参数如果是dic,都不需要返回值,原值就被改变了 def aa(dic): ...

  9. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用...

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  10. python中类方法与实例方法的区别-Python实例方法、类方法、静态方法的区别与作用详解...

    本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...

最新文章

  1. extmail集群的邮件负载均衡方案 [lvs dns postfix]
  2. bat脚本调用函数 简单列子
  3. 机器学习算法加强——SVM(支持向量机)
  4. Linux下,安装配置Weblogic
  5. 32要烧写3个bin文件_入门教程3:如何给ESP8266烧录Gagent固件,快速接入机智云实现透传功能...
  6. TI Sitara AM335x系统之AM335x uboot spl分析
  7. nginx设置跨域问题
  8. android的ListView做表格添加圆角边框
  9. Android 设置 横屏 竖屏 (转)
  10. 14-4 单任务版爬虫的架构
  11. python深度学习库keras——安装
  12. Oracle 11g下载及安装
  13. 三维球体史密斯圆图的发展与理解,史密斯圆图的最新发展
  14. jdk32位安装包下载_iTunes 企业版12.6.5,可下载应用安装包版本和支持升级iOS 12
  15. 数值核反应堆大数据及其应用
  16. 【每天学点心理学第七期】人性定理:人都是以服务于他自己为目的的!
  17. JavaScript中sort()对数组数字项函数function(a,b)返回值为a-b即为升序排列的细解
  18. labview与android,LabVIEW与Android手机的无线视频实时传输
  19. 陶华碧: 就懂辣椒酱,作为吃的东西,即使过了几代,也依然能够传的下去。
  20. 【Linux系列文章】正则表达式与文本处理工具

热门文章

  1. 面料软件_面料管理系统_面料订单管理
  2. 邮箱安全再成热点 金笛企业邮件系统保障企业用户通信安全
  3. Cell:基于33个遗传多样性水稻种质泛基因组分析揭示“隐藏”的基因组变异
  4. 从软件工程的角度写机器学习1——机器学习的思想
  5. 【微信小程序】页面返回且带回数据
  6. 【mysql】流程控制函数
  7. 【MySQL】表操作和库操作
  8. 数据库(教务管理系统)
  9. PyCharm配置SSH和SFTP连接远程服务器
  10. php开发telegram机器人接收机器人收到的消息