return multiple matches using re.match or re.search

南笙酒味 提交于 2019-12-06 15:32:44
schwobaseggl

You could do something along the following lines. Repeatedly use re.search while consuming the string. The implementation here uses a generator function:

import re

def findall(pattern, string):
    while True:
        match = re.search(pattern, string)
        if not match:
            break
        yield match.group(0)
        string = string[match.end():]

>>> list(findall(r'\(.*?\)', "0-1:24.2.1(180108205500W)(00001.290*m3)"))
['(180108205500W)', '(00001.290*m3)']

You can write a method using re.search() that returns a list of all matches:

import re  

def find_all(regex, text):
    match_list = []
    while True:
        match  = re.search(regex, text)
        if match:
            match_list.append(match.group(0))
            text = text[match.end():]
        else:
            return match_list

Also, note that your between_brackets regex will not take care of nested brackets:

re.findall('\(.*?\)', "(ac(ssc)xxz)")
>>> ['(ac(ssc)']
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!