python - 使用正则表达式获取匹配字符串的百分比
问题描述
我需要得到与提供的字符串匹配的正则表达式的百分比,例如。我有正则表达式:
^[A-Za-z]{1,2}[0-9]{4}[a-zA-Z]{1,3}$
它试图匹配包含一个或两个字符、四个数字和一到三个字符的字符串。现在,如果我将此正则表达式应用于aa1234bb
它将匹配,但如果使用aa1234
它将不匹配。
我想要的是在将正则表达式应用于字符串之后,它应该返回字符串与正则表达式匹配的百分比,例如,因为aa1234
它与给定的正则表达式匹配几乎 70%,如果我们认为在任何匹配的字符串中最多有 10 个字符.
解决方案
我想不出这在完全通用(即接受任何正则表达式)和完全在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 方法可能最有意义。
推荐阅读
- ios - iOS 中的 UndoManager 持久化
- r - left_join 在一致和非一致数据上 ifelse
- python-3.x - 如何将flutter与用python编写的Google Cloud API链接起来
- python - 递归:打印所有最长的公共子序列
- r - 自动为组中的每个级别制作时间序列图
- counter - 计数器如何与异或门和 3 个输入一起工作
- android - 数据未显示在使用 RxJava 使用 Android Paging3 分页的列表中
- c# - 使用字符串包含特定数字
- javascript - 反转饼图上的滑块比例
- php - 如何访问 laravel 路由资源方法?