对于上下文,我的用例是为了排名而确定与输入字符串相关的正则表达式的“精确”分数。虽然我意识到正则表达式精度可能是一个模糊的概念,但我将其用作我的用例作为匹配文字的数量。
以下是输入和输入的示例。这个神话功能的预期结果:
>>> get_literal_count(regex=r'foo(bizz|b[a-z]+)*', string='foobarbar')
>>> 5
示例分解以获得5的结果的方式:
foo [3 literals]
(bizz| [Not matching = 0 literals]
b[a-z]+)* [1 literal (the "b") matched 2 times = 2 literals]
我的调查和玩弄re& amp; sre_parse模块让我得出结论,实现我所追求的唯一方法是使用sre_parse重新编写一个home-brew re.match函数,该函数跟踪匹配文字的数量。
沿着那条路走下去,我需要重新实现匹配中使用的sre符号的所有(或至少是一个大子集),最终得到的本质上是一个非常慢的re.match函数(标准的lib re.match是用C语言编写的,但我的实现是用Python编写的,我在这里提出我的问题。
有没有人对此问题有任何见解?还有更好的方法吗?
编辑:为了澄清,我的示例中使用的正则表达式是任意的,该方法必须在任何正则表达式上运行。