re模块中search, findall, match等区别与用法


一、匹配对象以及group()和groups()方法:

当处理正则表达式时,除了正则表达式对象之外,还有另一个对象类型:匹配对象。这些是成功调用match()或者search()返回的对象。匹配对象有两个主要的方法:group()和groups()

1. group()要么返回整个匹配对象,要么根据要求返回特定子组。

>>> a = re.search(r"(\w)(.\d)","as.21")
>>> a<_sre.SRE_Match object; span=(1, 4), match='s.2'>
>>> a.group()  #返回整个匹配对象's.2'
>>> a.group(0)
's.2'
>>> a.group(1) #根据要求返回特定子组
's'
>>> a.group(2)
'.2'

2. groups()仅返回一个包含唯一或者全部子组的元组。

>>> a.groups()
('s', '.2')  #返回全部子组,是包含在一个元组中的

3. 如果没有子组的要求,那么当group()仍然返回整个匹配时,groups()返回一个空元组。

>>> a = re.search(r"\d+","334354") #没有子组匹配
>>> a.group() #返回整个匹配
'334354'
>>> a.groups() #返回空元组
()

好了,复习完上面这些概念,我们就重点来看下re模块中最常用的re.search()re.findall()的区别。


对比完区别之后,我们下面来通过一些示例来理解re.search()re.findall()在用法上的异同,以及更多扩展re.match、re.fullmatch 、re.finditer、re.sub和re.subn的用法示意。


二、re.search(pattern, string, flags=0)

搜索整个字符串并返回第一个成功的匹配,成功则返回一个匹配对象,失败则返回None.

>>> re.search("com","www.baidu.com")
<_sre.SRE_Match object; span=(10, 13), match='com'> 

>>> re.search("com","www.baidu.com.com.com")
<_sre.SRE_Match object; span=(10, 13), match='com'> # 只返回第一个匹配的位置

三、re.findall(pattern, string, flags=0)

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表。如果没有找到匹配,则返回空列表。

>>> re.findall("com","www.baidu.com.com.com")
['com', 'com', 'com']

>>> re.findall("aa","www.baidu.com.com.com")
[]

四、re.match(pattern,string,flags=0)

  • match()试图从字符串的起始部分对模式进行匹配,如果成功则返回一个匹配对象,失败则返回None.
>>> import re
>>> re.match(r"www","www.baidu.com")
<_sre.SRE_Match object; span=(0, 3), match='www'> # 返回的是匹配对象 

>>> type(re.match("www","www.baidu.com")) # 查看返回类型
 

>>> print(re.match("com","www.baidu.com"))
None

五、 re.fullmatch(pattern, string, flags=0)

完全匹配string

>>> print(re.fullmatch("com","com"))
<_sre.SRE_Match object; span=(0, 3), match='com'> 

>>> print(re.fullmatch("com","comssa"))  #必须要完全匹配
None

六、 re.finditer(pattern,string,flags=0)

查找所有匹配成功的字符串,并返回iteror

>>> re.finditer("com","www.baidu.com.com.com") #返回迭代器对象
 

>>> list(re.finditer("com","www.baidu.com.com.com"))
[<_sre.SRE_Match object; span=(10, 13), match='com'>, <_sre.SRE_Match object; span=(14, 17), match='com'>, <_sre.SRE_Match object; span=(18, 21), match='com'>]

七、re.sub()和re.subn()

  • re.sub用于替换字符串中的匹配项,
  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
>>> re.sub(r"[ae]","?","adsdeef")
'?dsd??f'
>>> re.subn(r"[ae]","?","adsdeef")  # subn()比sub()多返回了一个替换的总数
('?dsd??f', 3)

你可能感兴趣的:(re模块中search, findall, match等区别与用法)