首页 > 解决方案 > 使用正则表达式获取匹配字符串的百分比

问题描述

我需要得到与提供的字符串匹配的正则表达式的百分比,例如。我有正则表达式:

^[A-Za-z]{1,2}[0-9]{4}[a-zA-Z]{1,3}$

它试图匹配包含一个或两个字符、四个数字和一到三个字符的字符串。现在,如果我将此正则表达式应用于aa1234bb它将匹配,但如果使用aa1234它将不匹配。

我想要的是在将正则表达式应用于字符串之后,它应该返回字符串与正则表达式匹配的百分比,例如,因为aa1234它与给定的正则表达式匹配几乎 70%,如果我们认为在任何匹配的字符串中最多有 10 个字符.

标签: pythonregex

解决方案


我想不出这在完全通用(即接受任何正则表达式)和完全在re.

一种天真的但可能足够的方法是二分搜索。这假定您的正则表达式始终绑定到字符串的前面。下面是一个粗略的、未经测试的例子来展示这个想法。显然,对于长字符串,它可能会多次执行正则表达式。

def percent_match(regex, target):
    left = 0
    right = len(target) - 1
    current = right // 2
    while left < right:
        if regex.match(target[left:right]):
            left = current
        else:
            right = current
        current = (right - left) // 2
    return m / len(target)

另一方面,如果您只需要使用一个正则表达式来执行此操作,那么@ctwheels 方法可能最有意义。


推荐阅读