使用返回多个匹配项重新匹配或者搜索

2024-09-29 20:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一些代码转换为micropython,但遇到了一个特殊的正则表达式。在

在python中,我的代码是

import re

line = "0-1:24.2.1(180108205500W)(00001.290*m3)"
between_brackets = '\(.*?\)' 

brackettext  = re.findall(between_brackets, line) 
gas_date_str = read_date_time(brackettext[0])
gas_val      = read_gas(brackettext[1])

# gas_date_str and gas_val take the string between brackets 
# and return a value that can later be used

micropython只实现a limited set of re functions

如何在有限的可用功能下实现相同的功能?在


Tags: and代码import功能rereaddateline
2条回答

你可以按照下面的思路做一些事情。在使用字符串时重复使用re.search。这里的实现使用了一个生成器函数:

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)']

您可以使用re.search()编写返回所有匹配项列表的方法:

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

另外,请注意,between_brackets正则表达式不会处理嵌套方括号:

^{pr2}$

相关问题 更多 >

    热门问题