我有一根绳子
s = "mouse"
和一个字符串列表
sub_strings = ["m", "o", "se", "e"]
我需要找出与 s 匹配的列表的 sub_strings 的最佳和最短匹配子集是什么。
做这个的最好方式是什么?
理想的结果是 ["m", "o", "se"] 因为它们一起拼写为 mose
您可以使用正则表达式:
import re
def matches(s, sub_strings):
sub_strings = sorted(sub_strings, key=len, reverse=True)
pattern = '|'.join(re.escape(substr) for substr in sub_strings)
return re.findall(pattern, s)
这至少是短而快的,但不一定能找到最好的匹配集;太贪心了。例如,
matches("bears", ["bea", "be", "ars"])
returns ["bea"]
,什么时候应该返回["be", "ars"]
.
代码解释:
第一行按长度对子字符串进行排序,以便最长的字符串出现在列表的开头。这可以确保正则表达式更喜欢较长的匹配而不是较短的匹配。
第二行创建一个由所有子字符串组成的正则表达式模式,由|
符号,意思是“或”。
第三行只使用re.findall
函数查找给定字符串中模式的所有匹配项s
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)