我有一个电话号码数据集,我想互相检查。基本上,如果两个电话号码最多相隔1位,则正则表达式应该匹配。例如,我们有以下电话号码:
除了位置编号7之外,这些数字是相同的(第一个数字具有3而第二个数字具有2)。由于这些电话号码相差1位,正则表达式应该匹配。按理说,如果电话号码完全相同,正则表达式也应该匹配。在下面的情况下(见下文),正则表达式不应该匹配,因为电话号码相差超过1位数:
有没有人有正确的正则表达式?我正在使用python中的re模块编写正则表达式。
答案 0 :(得分:2)
根据您的使用情况 - 如果您还要抓住"哦,您错过了一个数字"或者"呃,那个数字不应该在那里",而是使用两个数字之间的编辑距离。
您可以使用levenshtein编辑距离来获取多少"编辑"两个数字之间需要,例如使用editdistance库进行python。
>>> import editdistance
>>> editdistance.eval('banana', 'bahama')
2L
答案 1 :(得分:0)
这可能不是最好的代码,但它可以完成这项工作。
from collections import Counter
a = '+31612345678'
b = '+31612245678'
def match(p1, p2):
ct = Counter([a == b for a, b in zip(p1, p2)])
if not ct[False] > 1:
<throw match>
答案 2 :(得分:0)
您不会为此使用正则表达式。如果您的电话号码长度与
相同def is_match(phone_nr_1, phone_nr_2):
diff = filter(lambda x: x[0] != x[1],
zip(phone_nr_1, phone_nr_2))
return len(diff) <= 1
print is_match("+31612345678", "+31612245678")
#=> True
print is_match("+31612345678", "+31611145678")
#=> False
可以胜任。