具有多个条件的 C# 正则表达式
本文关键字:正则表达式 条件 | 更新日期: 2023-09-27 18:32:46
我需要编写一个完全满足以下条件的正则表达式:
- 值将是正好 6 位数字 不允许
- 连续的 6 位数字(例如不允许123456、654321、234567等) 允许的重复
- 数字不超过 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 个条件。
您可以尝试将第一个条件更改为:
'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 个正则表达式对象和/或它们在一起。