我用Python学习了很多正则表达式,我很难用正则表达式来支持没有连续4个或更多重复字符的测试用例,我在互联网上找到了简单的解决方案,但我需要判断不包括"-"字符的重复字符,例如:

bic-hota  // Valid
bichota  // Valid
bichota1234 // Valid
bich222ota // Valid, sequence "222" with length of 3 is allowed 

bichota2222 // Invalid because have "2222" and isn't allowed length of 4 or more
bichota22-22 // Invalid because have "2222" (ignore the '-') and isn't allowed length of 4 or more

在最后一个测试用例中,您可以看到序列"22-22",我需要忽略序列之间的"-",以验证整个序列,我已经搜索了如何解决这个问题,我使用了非捕获组(?:-?),但这不起作用:(

^(?![\w]*([\w])(?:-?)\1{3,})[\w-]+$

我的正则表达式有什么问题,如何修复?

测试用例:https://regexr.com/6p0ca

推荐答案

您可以使用此正则表达式:

^(?!.*(\w)(?:-?\1){3}).+

RegEx Demo

RegEx Details:

  • ^:开始
  • (?!: Start negative lookahead
    • .*:匹配任意长度的字符
    • (\w):匹配角色并在组#1中捕获
    • (?:-?\1){3}:匹配可选-,然后反向引用组#1.重复此组3次.
  • ):结束负前瞻
  • .+:匹配任意字符的1+

要仅允许使用文字字符和连字符,请执行以下操作:

^(?![\w-]*(\w)(?:-?\1){3})[\w-]+$

Python-3.x相关问答推荐

如何在Django中创建两个不同权限的用户?

S的两极是什么,相当于大Pandas 的`.ilo‘方法?

如何通过Pandas为不同的列集垂直设置列数据?

将f-字符串放置在f-字符串内

切片时是否在NumPy ND数组中创建新对象?

Pandas 插入的速度太慢了.对于跟踪代码,什么是更快的替代方案?

当条件第一次出现时将行标记为True,如果按顺序重复则标记为False

tkinter/python3.9 中的 Entry 子类和用户输入重复的问题

Python 舍入数字不准确

pytorch 中 mps 设备的 manual_seed

pytorch 中 mps 设备的 manual_seed

Python 3 - 给定未知数量的类别动态地将字典嵌套到列表中

裁剪复数以解决 exp 中的溢出错误

多进程:两个进程,一起杀死

为什么我不能通过索引获取字典键?

为什么 Python 枚举中的可变值是同一个对象?

为什么 TensorFlow 的 `tf.data` 包会减慢我的代码速度?

Python 3 - Zip 是 pandas 数据框中的迭代器

Python 2 与 Python 3 - urllib 格式

将 Python 字节转换为无符号 8 位整数