使用python3的正则表达式功能,是否可以根据找到的重复次数来捕获可变数量的捕获块?例如,在以下搜索字符串中,我想使用相同的正则表达式捕获所有数字字符串。
搜索字符串 1(尝试捕获:89, 45):
zzz89zzz45.mp3
搜索字符串 2(尝试捕获:98、67、89、45):
zzz98zzz67zzz89zzz45.mp3
搜索字符串 3(尝试捕获:98、67、89、45、55、111):
zzz98zzz67zzz89zzz45vdvd55lplp111.mp3
以下正则表达式将匹配所有重复项,但所有值均不可用于以后使用(仅捕获 1 位数字字符串):
((\d+)\D*)*\.mp3$
其他 2 个选项是为每种情况编写不同的正则表达式,或者使用 findall()。有没有办法调整上面的正则表达式,以便捕获每个数字字符串,以便以后仅使用正则表达式工具进行不同次数的重复使用,或者在 python3 中执行此操作,您是否被迫使用 findall() ?
大多数或所有常用的正则表达式引擎,特别是基于 PCRE 语法的引擎(例如 Python 的),根据左括号的数字索引来标记其捕获组,正如正则表达式所写。所以不,您不能单独使用捕获组从字符串中提取任意数量的子序列。
你能得到的最接近的(据我所知)是手动写出一定数量的捕获组,如下所示:
s = ...
res = re.match(r'\D*' + 25 * r'(\d+)\D+')
numbers = [r for r in res.groups() if r is not None]
这将为您提供最多 25 组数字。如果您需要更多,请将 25 替换为更大的数字。
如果这比迭代方法的效率低,我不会感到惊讶findall()
,虽然我还没有测试过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)