return 使用 re.match 或 re.search 的多个匹配项
return multiple matches using re.match or re.search
我正在将一些代码转换为 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
如何仅使用有限的可用功能实现同样的效果?
您可以按照以下方式进行操作。在使用字符串时重复使用 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()
编写一个方法 returns 所有匹配项的列表:
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
正则表达式不会处理嵌套括号:
re.findall('\(.*?\)', "(ac(ssc)xxz)")
>>> ['(ac(ssc)']
我正在将一些代码转换为 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
如何仅使用有限的可用功能实现同样的效果?
您可以按照以下方式进行操作。在使用字符串时重复使用 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()
编写一个方法 returns 所有匹配项的列表:
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
正则表达式不会处理嵌套括号:
re.findall('\(.*?\)', "(ac(ssc)xxz)")
>>> ['(ac(ssc)']