代码之家  ›  专栏  ›  技术社区  ›  Aleksey

如何防止在字符串中使用两个以上的重复数字?[已关闭]

  •  -4
  • Aleksey  · 技术社区  · 2 年前

    如何禁止在字符串中使用两个以上的重复数字? 我真的不明白。我想我需要使用回溯参考

    有效期:

    122122122
    949944494
    5656665
    10111001
    

    无效:

    122142122 <---- 4
    949984494 <---- 8
    5656265   <---- 2
    10113001  <---- 3
    
    2 回复  |  直到 2 年前
        1
  •  -1
  •   blhsing    2 年前

    您可以捕获第一个字符,将其与backreference匹配,直到您可以捕获不同的第二个字符,然后以交替模式将捕获的两个字符与backreferences匹配,直到结束:

    ^(.)?\1*(.)?(?:\1|\2)*$
    

    演示: https://regex101.com/r/5wvoAp/4

        2
  •  -1
  •   Daviid    2 年前

    既然你说

    因为它有三个唯一的数字。

    我认为,即使没有模式或重复,以下内容也是有效的:

    • 1121211222
    • 000001
    • 69
    • 1.

    您可以获取该值并用它创建一个字符串,然后将其拆分为单个字符,使其成为一个集合,并检查长度是否为1或2:

    values_to_test = [
        122122122,
        949944494,
        5656665,
        10111001,
        122142122,
        949984494,
        5656265,
        10113001,
    ]
    
    for value in values_to_test:
        unique_characters = set(str(value))
        if len(unique_characters) in (1,2):
            print(f"Valid {value}")
        else:
            print(f"Invalid {value} contains {len(unique_characters)} different characters {unique_characters}")
    

    输出:

    Valid 122122122
    Valid 949944494
    Valid 5656665
    Valid 10111001
    Invalid 122142122 contains 3 different characters {'2', '1', '4'}
    Invalid 949984494 contains 3 different characters {'8', '9', '4'}
    Invalid 5656265 contains 3 different characters {'6', '2', '5'}
    Invalid 10113001 contains 3 different characters {'0', '1', '3'}