python3正则-多匹配函数

发布时间 2023-04-15 12:41:28作者: 挖洞404

1、介绍
这里介绍findall和finditer两个函数。

2、findall函数

findall(pattern, string, flags=0)
  • pattern,正则表达式
  • string,待处理字符串
  • flags,标志,处理模式
  • 返回类型为list,如果不存在匹配,返回空列表[]。如果存在匹配,则返回全部匹配项,这里需要注意()的影响

2.1 无()

import re

# pattern = "abc"
# result = re.findall(pattern=pattern, string="-abcdefabc")
# print(result)
# print(type(result))
"""
['abc', 'abc']
<class 'list'>
"""

当没有()时,是将pattern表示的规则作为整体进行匹配

2.2 存在一个()

# pattern = "(a)bc"
# result = re.findall(pattern=pattern, string="-abcdefabc")
# print(result)
# print(type(result))
"""
['a', 'a']
<class 'list'>
"""

当存在一个()时,是将pattern表示的规则作为整体进行匹配,但是仅将pattern中()包含的部分作为结果,此时的元素仍是str

2.3 存在多个并列的()

pattern = "(a)(b)c"
result = re.findall(pattern=pattern, string="-abcdefabc")
print(result)
print(type(result))
"""
[('a', 'b'), ('a', 'b')]
<class 'list'>
"""

当存在多个并列的()时,是将pattern表示的规则作为整体进行匹配,但是仅将pattern中()包含的部分作为结果,此时的元素仍是tuple

2.4 存在嵌套的()

pattern = "((abc)(def)123)(---)c"
result = re.findall(pattern=pattern, string="abcdef123---c")
print(result)
print(type(result))
"""
[('abcdef123', 'abc', 'def', '---')]
<class 'list'>
"""

当存在嵌套的()时,会从外到内,从左到右进行对匹配项编号

2.5 存在个数不定的()匹配

pattern = "(([^0-9])*123)(.*)c"
result = re.findall(pattern=pattern, string="abcdef123-+-c")
print(result)
print(type(result))
"""
[('abcdef123', 'f', '-+-')]
<class 'list'>
"""
  • 外部存在个数不定的()匹配,参照2.2
  • 内部存在个数补丁的()匹配,只会输出其最后一次匹配的内容

3、finditer函数

finditer(pattern, string, flags=0)
  • pattern,正则表达式
  • string,待处理字符串
  • flags,标志,处理模式
  • 返回类型为callable_iterator,其处理过程和findall相同,区别在于返回的是可迭代类型对象