Regex:检查两个电话号码是否最多相差1个号码



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

  • + 31612345678
  • + 31612245678

除了位置7之外,这些数字是相同的(第一个数字是3,第二个数字是2)。由于这些电话号码相差1位,正则表达式应该抛出匹配。很显然,如果电话号码完全相同,正则表达式也应该抛出匹配。在下面的情况下(见下文),当电话号码相差超过1位时,正则表达式不应该抛出match:

  • + 31612345678
  • + 31611145678

有没有人有一个好的正则表达式在脑海中?我正在使用python中的re模块编写正则表达式。

根据你的用例——如果你还想捕捉"哦,你漏了一个数字"或"嗯,那个数字不应该在那里",使用两个数字之间的编辑距离代替。

您可以使用levenshtein编辑距离来获得两个数字之间需要多少"编辑"的数字,例如通过使用python的editdistance库。

>>> import editdistance
>>> editdistance.eval('banana', 'bahama')
2L

这可能不是最好的代码,但它可以完成工作。

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>

您不会为此使用正则表达式。如果你的电话号码有相同的长度,比如

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

就可以了

最新更新