python基础-6.1 match search findall group(s) 区别
import re
# match findall经常用
# re.match() #从开头匹配,没有匹配到对象就返回NONE
# re.search() #浏览全部字符,匹配第一个符合规则的字符串
# re.findall() # 将匹配到的所有内容都放置在一个列表中
一 match
# match 的两种情况
#无分组
r = re.match("h\w+",origin)
print(r.group()) # 获取匹配所有结果 hello
print(r.groups()) #获取模型中匹配到的分组 ()
print(r.groupdict()) #获取模型中匹配到的分组 {}
#有分组(带有括号的就是有分组)
取匹配到的正则再次取其部分内容,括号中的。
origin = "hello alex sadf dsaf"
r = re.match("(h)\w+",origin)
print(r.group()) # hello 获取匹配所有结果
print(r.groups()) #('h',) #获取模型中匹配到的分组结果,放到元组里,就是括号中的 没有分组则为空元组,
r = 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'}
二 groups group groupdict
print(r.group()) # hello 获取匹配所有结果
print(r.groups()) #('h',) #获取模型中匹配到的分组,放到元组里,没有分组则为空元组
r = 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 的两种情况
search 不用从开头匹配,而是匹配全局整个字符串,一旦又符合就退出
# 无分组
origin = "hello alex alix bcd dsfa lefg abc 199"
r = re.search("ali\w+",origin)
print(r.group()) #alix
print(r.groups()) #()
print(r.groupdict()) #{}
# 有分组
origin = "hello alex alix bcd dsfa lefg abc 199"
r = re.search("a(\w+)",origin)
print(r.group()) #alex
print(r.groups()) #('lex',)
r = re.search("(?P<key1>a)(?P<key2>(\w+))",origin)
print(r.groupdict()) #{'key1': 'a', 'key2': 'lex'}
四 findall
# 1 匹配到之后,就抽离,继续从下一个字符,依次匹配。
origin = "a2b3c4d5"
a=re.findall("\d+\w\d+",origin) #['2b3', '4d5']
print(a)
# 2 空值也会挨个字符去匹配,结尾后,还要继续多匹配一次
num = "asd"
print(re.findall("",num)) # ['', '', '', '']
# 无分组
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'] 在匹配的值里面做了分组。把groups里的内容放到列表里,只拿组里面的东西
print(re.findall("(a)(\w+)(x)",origin)) # [('a', 'le', 'x'), ('a', 'li', 'x')] 将 三个分组匹配到的做成元组 放到列表作为一个元素
findall 特点
分组匹配
* 贪婪匹配: 比如如下的asd 为一个分组,而一旦遇到asd开始的字符串,如果
后面还是asd也会匹配,这就是贪婪匹配。
findall 特性:
1 有几个分组返回几个内容:,并将返回内容放到元组内 作为列表的一个元素。
2 即尽管* 匹配到了两个asd ,但是因为是贪婪虚拟匹配出的,有一个分组,所以,
只会,取一个。
3 而findall默认只取最后一组匹配的内容,按照真实的括号数量。故此 只返回最后一组asd
4 findall 如果正则能有空的匹配的话,那么匹配字符串最后还会匹配到一个空
5 多个分组匹配到做成元组,当成列表的一个元素
6 多个分组,查找顺序,外到内,左到右 ((\w)(\w)){2,} 先是找到2个字母的,再在这两个字母里面进行局部分组
#1 特性1 2 3 4
print(re.findall(r'(asd)*','asdasd')) #['asd', '']
#2 如下,默认+可以第一次 就匹配到 1asd2asd 但由于前面只有1个分组,只能返回后面的4位了
n = re.findall("(\dasd)+","1asd2asdp2asds") # ['2asd', '2asd']
print(n)
#3 如下,默认*可以第一次 就匹配到 1asd2asd 但由于前面只有1个分组,只能返回后面的4位了
#但是*还可以表示0次,故再遇到p的时候,空就能匹配了,而且,最后还有个s也匹配到空,结尾还默认还会匹配到空
n = re.findall("(\dasd)*","1asd2asdp2asds") # ['2asd', '', '2asd', '', '']
print(n)
#4 匹配,最多四个字母,因此alex都找到了,但是只有一个分组,所以只返回最后一个\w故x
a = "alex"
n = re.findall("(\w){4}",a)
print(n) # ['x']
#5 这里findall 匹配分组是一个字母匹配到了,而*是贪婪匹配,四个字母都匹配就取到了四个字母,而正则分组只有一个,因此只取最后一个
a = "alex"
n = re.findall("(\w)*",a)
print(n) # ['x', '']
#6 由于从外到内, 所以匹配两个字母的 al 匹配到了,ex也匹配到了,外部分组1个,因此ex,而内部从左到右又会匹配。
a = "alex"
n = re.findall("((\w)(\w)){2,}",a)
print(n) # [('ex', 'e', 'x')]
#7 会匹配ax alex alex acd 但是贪婪匹配的分组只有 1个 因此 ax ax ax ad
origin = "hello ax lex bed alex lge alex acd 19"
n = re.findall("(a)(\w)*" , origin)
print(n) #[('a', 'x'), ('a', 'x'), ('a', 'x'), ('a', 'd')]
#1 特性1 2 3 4
|
1
|
print(re.findall(r'(asd)*','asdasd')) #['asd', ''] |
#2 如下,默认+可以第一次 就匹配到 1asd2asd 但由于前面只有1个分组,只能返回后面的4位了
|
1
2
|
n = re.findall("(\dasd)+","1asd2asdp2asds") # ['2asd', '2asd']print(n) |
#3 如下,默认*可以第一次 就匹配到 1asd2asd 但由于前面只有1个分组,只能返回后面的4位了
#但是*还可以表示0次,故再遇到p的时候,空就能匹配了,而且,最后还有个s也匹配到空,结尾还默认还会匹配到空
|
1
2
|
n = re.findall("(\dasd)*","1asd2asdp2asds") # ['2asd', '', '2asd', '', '']print(n) |
#4 匹配,最多四个字母,因此alex都找到了,但是只有一个分组,所以只返回最后一个\w故x
|
1
2
3
|
a = "alex"n = re.findall("(\w){4}",a)print(n) # ['x'] |
#5 这里findall 匹配分组是一个字母匹配到了,而*是贪婪匹配,四个字母都匹配就取到了四个字母,而正则分组只有一个,因此只取最后一个
|
1
2
3
|
a = "alex"n = re.findall("(\w)*",a)print(n) # ['x', ''] |
#6 由于从外到内, 所以匹配两个字母的 al 匹配到了,ex也匹配到了,外部分组1个,因此ex,而内部从左到右又会匹配。
|
1
2
3
|
a = "alex"n = 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"n = re.findall("(a)(\w)*" , origin)print(n) #[('a', 'x'), ('a', 'x'), ('a', 'x'), ('a', 'd')] |
python基础-6.1 match search findall group(s) 区别的更多相关文章
- python正则之match search findall
match:只匹配一次,开头匹配不上,则不继续匹配 a,b,\w+ match(a,"abcdef") 匹配a >>> re.match("a" ...
- python 基础 8.3 match方法和search方法
一,正则对象的split 方法 split(string[,maxsplit]) 按照能够匹配的字串讲string 分割后返回列表.maxsplit 用于指定最大分割次数,不指定将全部分割.来查找符合 ...
- python基础之小数据池,is和==区别 编码问题
主要内容 小数据池,is和==区别 编码问题 小数据池 一种缓存机制,也称为驻留机制,是为了能更快提高一些字符串和整数的处理速度is 和 == 的区别 == 主要指对变量值是否相等的判断,只要数值相同 ...
- python基础===进程,线程,协程的区别(转)
本文转自:http://blog.csdn.net/hairetz/article/details/16119911 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自 ...
- python基础教程:dir()和__dict__属性的区别
只要是有属性的数据对象(不一定是面向对象的对象实例,而是指具有数据类型的数据对象),都可以通过- ---- __dict__和dir()来显示数据对象的相关属性. __ dict__可以看作是数据对象 ...
- Python基础-week05
本节大纲:Author:http://www.cnblogs.com/Jame-mei 模块介绍 time & datetime模块 random os sys shutil json &am ...
- Python基础篇【第3篇】: Python正则表达式
正则表达式 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.正则表达式是一个特殊的 ...
- 1.22 Python基础知识 - 正则表达式
Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re ...
- Python中re的match、search、findall、finditer区别
原文地址: http://blog.csdn.net/djskl/article/details/44357389 这四个方法是从某个字符串中寻找特定子串或判断某个字符串是否符合某个模式的常用方法. ...
随机推荐
- ID学习一 Basic
Assignment 作用:定义变量并赋值 变量可以是新定义的也可以是已经存在的: 值可以是另一个变量的值.一个文本值.一个复杂的表达式(利用表达式编辑助手构造): 注意:一旦变量被定义,你不能删除变 ...
- 源讯科技(中国)有限公司(Atos Worldline)
源讯公司是欧洲***的IT服务公司,去年营收达到88亿欧元,在全球52个国家拥有77100名员工.Worldline为Atos(源讯)全资子公司,专注于金融支付领域.Worldline在B2B及B2C ...
- 计蒜客 蓝桥模拟 A. 结果填空:矩阵求和
给你一个从 n×nn \times nn×n 的矩阵,里面填充 111 到 n×nn \times nn×n .例如当 nnn 等于 333 的时候,填充的矩阵如下. 1 1 2 3 2 4 5 ...
- muduo
https://blog.csdn.net/zxm342698145/article/details/80689016 https://blog.csdn.net/u010087886/article ...
- 什么是UAT
基本概念 UAT,英文User Acceptance Test的简写,也就是用户验收测试,或用户可接受测试,系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测 ...
- RPC vs REST
RPC vs REST 另外,由于Dubbo是基础框架,其实现的内容对于我们实施微服务架构是否合理,也需要我们根据自身需求去考虑是否要修改,比如Dubbo的服务调用是通过RPC实现的,但是如果仔细拜读 ...
- python装饰器的简单理解
如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 装饰器的使用方法很固定: 先定义一个装饰函数(帽子)(也可以用类.偏函数实现) 再定义你 ...
- 数组对象去重 reduce()
let log = console.log.bind(console); let person = [ {id: 0, name: "小明"}, {id: 1, name: &qu ...
- 关了浏览器再开,怎么session还在?
关了浏览器session当然仍然存在,因为session是储存在服务器端的,而服务器是不可能知道你有没有关掉浏览器. 服务器只是简单的保持session接受用户请求,只有当session一段时间没有被 ...
- mybatis中延迟加载Lazy策略
延迟加载: lazy策略原理:只有在使用查询sql返回的数据是才真正发出sql语句到数据库,否则不发出(主要用在多表的联合查询) 1.一对一延迟加载: 假设数据库中有person表和card表:其中p ...