【发布时间】:2021-08-20 07:40:49
【问题描述】:
我需要在字符串中找到与正则表达式匹配的所有子字符串的位置。例如,如果字符串为abbba,正则表达式为(b|bb)(?=a),则结果应为[(2, 4), (3, 4)]。
我想出的是
def get_ranges(pattern: str, string: str) -> list[tuple[int, int]]:
n = len(string)
return [(start, end) for start in range(n + 1) for end in range(start, n + 1)
if re.fullmatch(f'.{{{start}}}({pattern}).{{{n - end}}}', string)]
但这往往会执行得非常缓慢,尤其是考虑到它不允许使用预编译的正则表达式。有没有更有效的方法来解决这个问题?
【问题讨论】:
标签: python regex performance