正则表达式以6位数字的顺序交替显示一次

时间:2019-05-04 18:36:38

标签: python regex regex-lookarounds regex-group regex-greedy

我尝试使用以下模式来检查使用|并使用否定超前行在各个位置上是否出现交替数字:

(\d)\d\1(?!(\d)\d\2)\d{3}|\d{2}(\d)\d\3\d|(?!(\d)\d\4)(\d)\d\5

这些值有效:

101123

121013

这些无效:

101101

111111

2 个答案:

答案 0 :(得分:1)

好,你走了,这只有在有的时候才匹配 不是每个其他数字重复的序列
每个3位数序列内。

即。 D1 d D1 D2 d D2失败
D1 d D1 D2 d D2 d D3 d D3失败

^(?!(?:(\d)\d\1)+$)\d+$

https://regex101.com/r/Qn1i3f/1

可读代码

 ^ 
 (?!
      (?:
           ( \d )                        # (1)
           \d \1 
      )+
      $ 
 )
 \d+ 
 $

答案 1 :(得分:0)

This regex可以帮助您<-在第一个捕获组(*SKIP)(*FAIL)中重复两位和三位数字,然后返回其他所需的六位数字:

()

enter image description here

第一组使用this expression捕获不需要的数字,您可以对它进行简单的字符串替换并从输入中删除这些数字:

(\d{2,3}).*\1(*SKIP)(*F)|([0-9]{6})

enter image description here

图表:

此图显示了它的工作方式:

enter image description here

编辑

(\d{2,3}).*\1 是PCRE命令,不适用于Python。