具有多个条件的 C# 正则表达式

本文关键字:正则表达式 条件 | 更新日期: 2023-09-27 18:32:46

我需要编写一个完全满足以下条件的正则表达式:

  1. 值将是正好 6 位数字
  2. 不允许
  3. 连续的 6 位数字(例如不允许123456、654321、234567等)
  4. 允许的重复
  5. 数字不超过 2 个(例如,111234、123444、123334不允许,但允许112345、123455、123345)

我正在尝试编写此正则表达式,但失败了。请注意,我可以单独为该条件编写正则表达式,但我需要一个组合的正则表达式。请尽快帮助我任何人。

得到了一个解决方案,它只完全满足了我的第一个和第二个标准:

string re = @"(?x)
        ^
        # fail if...
        (?!
            # repeating numbers
            0{3,}|1{3,}|2{3,}|3{3,}|4{3,}|5{3,}|6{3,}|7{3,}|8{3,}|9{3,}$
            |
            # sequential ascending
            (?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){5} 'd $
            |
            # sequential descending
            (?:0(?=9)|1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5} 'd $
        )
        # match any other combinations of 6 digits
        'd{6}
        $
    ";

但是,我需要完整的解决方案(组合正则表达式)来完全满足我的 3 个条件。

具有多个条件的 C# 正则表达式

您可以尝试将第一个条件更改为:

'd*('d)(?:'d*'1){2,}'d*$

('d)(?:'d*'1){2,}将匹配 2 个以上的重复数字(连续与否),并且'd*允许在重复部分之前或之后使用任意数量的数字。

这意味着您的新正则表达式变为:

string re = @"(?x)
        ^
        # fail if...
        (?!
            # repeating numbers
            'd*('d)(?:'d*'1){2,}'d*$
            |
            # sequential ascending
            (?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){5} 'd $
            |
            # sequential descending
            (?:0(?=9)|1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5} 'd $
        )
        # match any other combinations of 6 digits
        'd{6}
        $
    ";

正则表达式101演示

尝试程序正则表达式教练。在那里,您可以更好、更快地分析正则表达式并使其工作,然后再将其插入 C# 程序。

如果你不喜欢那么长的正则表达式,你总是可以制作 3 个正则表达式对象和/或它们在一起。