正则表达式:检查两个电话号码最多是否相差1个号码

时间:2016-10-16 18:07:38

标签: python regex

我有一个电话号码数据集,我想互相检查。基本上,如果两个电话号码最多相隔1位,则正则表达式应该匹配。例如,我们有以下电话号码:

  • 31612345678
  • 31612245678

除了位置编号7之外,这些数字是相同的(第一个数字具有3而第二个数字具有2)。由于这些电话号码相差1位,正则表达式应该匹配。按理说,如果电话号码完全相同,正则表达式也应该匹配。在下面的情况下(见下文),正则表达式不应该匹配,因为电话号码相差超过1位数:

  • 31612345678
  • 31611145678

有没有人有正确的正则表达式?我正在使用python中的re模块编写正则表达式。

3 个答案:

答案 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

可以胜任。