第一种方法 -
好吧,使用正则表达式你可以这样做 -
import re
re.sub('g+', 'g', 'omgggg')
re.sub('l+', 'l', 'lollll')
等等
让我指出,使用正则表达式是处理这个问题的一种非常脆弱和基本的方法。您可以很容易地从用户那里获取字符串,这将破坏上述正则表达式。我想说的是,这种方法需要大量维护,以观察用户所犯错误的模式,然后为他们创建特定于案例的正则表达式。
第二种方法——
相反,您是否考虑过使用difflib
模块?它是一个带有帮助器的模块,用于计算对象之间的增量。对您来说特别重要的是SequenceMatcher
. 从官方文档中解释-
SequenceMatcher 是一个灵活的类,用于比较任何类型的序列对,只要序列元素是可散列的。SequenceMatcher 尝试计算两个序列之间的“人类友好差异”。基本概念是最长
连续且无垃圾的匹配子序列。
import difflib as dl
x = dl.SequenceMatcher(lambda x : x == ' ', "omg", "omgggg")
y = dl.SequenceMatcher(lambda x : x == ' ', "omgggg","omg")
avg = (x.ratio()+y.ratio())/2.0
if avg>= 0.6:
print 'Match!'
else:
print 'Sorry!'
根据文档,任何超过 0.6 的 ratio() 都是匹配的。您可能需要探索调整比率以满足您的数据需求。如果您需要更严格的匹配,我发现任何超过 0.8 的值都很好。