添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

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)
[('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)
['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)
>>> 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()
>>> m.next().group()
>>> m.next().group()
>>> 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)
>>> 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
1、matchre.match(pattern, string[, flags])从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。2、searchre.search(pattern, string[, flags])若string中包含pattern子串,则返回Match对象,否则
最近刚学习了 Python 3 的re模块,对正则表达式有了初步的了解,试着写了个代码发现正则表达式怎么一直不起作用。 结果发现是自己没搞清楚re. match ()、re. search ()和re. findall ()的 区别 。 re. match () 总是从字符串“开头”去匹配,并返回匹配的字符串的 match 对象。所以当我用re. match ()函数去匹配字符串非开头部分的字符串时,会返回NONE。
re. match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re. search 匹配整个字符串,直到找到一个匹配,可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式语法: re. match (pattern, string, flags=0)函数参数说明: pattern 匹配的正则表达式 string 要匹配的字符串 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 二、re. search
正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。(来自百度) 正则表达式语法 (图片资料转自https://www.cnblogs.com/chengege/p/11190782.html) re模块是 python 内置的,支持正则匹配的模块。 match 方法 match 方法的语法为:re. match (pattern,string,[flags=0]) patter
python 的正则匹配如果看懂了,很有逻辑,还是比较好用的。但是如果不熟悉的话,感觉函数太多,难以区分。 match search 是正则匹配 常用的两个函数。 在用之前我们首先想,如果我想找某字符串的头上有没有指定的某个字符串,我们该怎么办? python 专门给我们提供了一个函数,它就是 match match 只会匹配字符串头,如果字符串头有想要查找的模式,那就返回成功,如果没有那么就返回none。
python 正则模块re findall 和find iter 两者相似,但却有很大 区别 。  两者都可以获取所有的匹配结果,这和 search 方法有着很大的 区别 ,同时不同的是一个返回list,一个返回一个 Match Object类型的 iter ator 假设我们有这样的数据:其 数字代表电话号,xx代表邮箱类型 content = '''email:12345678@163.com email:2345678@163.com email:345678@163.com 需求:(正则没有分组)提取所有的邮箱信息 result_find iter = re.find iter (r"\d+@\w+
本文实例讲述了 Python 3正则匹配re.split,re.find iter 及re. findall 函数用法。分享给大家供大家参考,具体如下: re.split re.find iter re. findall @( python 3) 官方 re 模块说明文档 re.compile() 函数 编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。 re 模块最离不开的就是 re.compile 函数。其他函数都依赖于 compile 创建的 正则表达式对象 re.compile(pattern, flags=0) pattern 指定编译时的表达式字
Python re模块的几个常用函数 match ()函数 match ()函数试图从字符串的起始部分对模式进行匹配。如果匹配成功则返回 Match Object对象实例,如果不是起始位置匹配成功的话,就返回None。 search ()函数 re. search ()函数扫描整个字符串并返回第一个成功的匹配,匹配成功re. search 方法返回 Match Object对象的实例,否则返回None。 compile()函数 re.compile()函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,供 match
1. 测试正则表达式的工具。 在线正则表达式测试: http://tool.oschina.net/regex/ 2. 常见的匹配模式3. 常用的匹配方法3.1. re. match re. match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话, match ()就会返回none 最常规的匹配 import re content = "Hello 123 4567 World_Thi
相比其他方法, findall 方法有些特殊。它的作用是查找字符串 所有能匹配的字符串,并以结果存于列表 ,然后返回该列表 注意: match search 是匹配一次 findall 匹配所有。 1 pattern. findall 方法 该方法的作用是在string[pos, endpos]区间从pos下标处开始查找所有满足pattern的子串, 直到endpos位置结...
pat=re.compile('(生产|产量|销量).*?[升吨]') res=pat.search('我国啤酒行业年产量就进入了下滑通道,2019年全国规模以上啤酒企业累计销量3765.3万千吨生,较2018年的3812.2万千升下降1.23%') [/code] 这个findall找不到,但是search就可以搜到。这是为什么呢? 编写systemd service文件 挑战自己~: 多谢博主,讲的很细。 基于Bootstrap的switch button heiPony: 感恩感恩。。。 Linux进程状态:D weixin_43956160: D状态的触发原因具体有哪些?