我有一个数字列表,并使用看起来像(\d)(?=\d*\1)
的正则表达式
示例数字列表:
1234
5678
5565
5566
5567
5656
1212
当前输出使用表达式:
5565
5566
5567
5656
1212
但是,我想提取4个数字的2对数字列表,无论安排是什么。例如: 1122,1212,2211,2121,1221,2112
所需输出的示例:(其中5565,5567为假)
5566
5656
1212
我不熟悉正则表达式,需要一些帮助。
答案 0 :(得分:4)
如果您的号码总是4位数,您可以这样做
(?:(\d)(\d)\1\2)|(?:(\d)\3(\d)\4)|(?:(\d)(\d)\6\5)
因此,如果您有四位数字,则每个数字只能有两个不同的数字。使用\1
,您可以引用第一个数字,第二个数字为\2
,等等。此正则表达式匹配三个可能的分布:abab
,abba
和aabb
。
答案 1 :(得分:3)
而不是Regex
,如果你想要普通的C#
代码,那么这将是
int number = 1212;
var isDoublePair = number.ToString()
.ToCharArray()
.GroupBy(c => c)
.Select(grp => grp.Count())
.All(count => count == 2);
如w.b所述,这可以缩短为
var isDoublePair = number.ToString()
.GroupBy(c => c)
.All(g => g.Count() == 2);