python3正则-多匹配函数
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相同,区别在于返回的是可迭代类型对象