我试试看:import re
full_pattern = re.compile(r"^([a-z][a-z]?)?(\d\d\d\d)?([a-z][a-z]?[a-z]?)?$")
num_pos_matches = 3 # 9 groups in our reg
list_of_test_cases = ["aa1234bb","aa1234","1234bb","aabb","+pow","aa","1234","b5555bb"]
def get_match_percentage(in_str):
m = re.match(full_pattern,in_str)
if m == None:
return 0
m_g = m.groups()
counter = 0
for x in m_g:
if x == None:
counter+=1
return round((1 - counter/num_pos_matches) * 100,2)
# print some tests
for test_case in list_of_test_cases:
print(test_case, " matched ",get_match_percentage(test_case), "% of the ",num_pos_matches, " Regex groups")
通过输出:
^{pr2}$
我认为肯定有一些失败的例子,例如我希望"123dfg"给出{},但是它产生了123dfg matched 0 % of the 3 Regex groups
所以你可以按摩一下来解决这些问题。很多功劳归功于@ctwheels的团队理念。在