使用正则表达式对重复的字符?

时间:2015-10-11 07:03:19

标签: c# regex

我有一个数字列表,并使用看起来像(\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

我不熟悉正则表达式,需要一些帮助。

2 个答案:

答案 0 :(得分:4)

如果您的号码总是4位数,您可以这样做

(?:(\d)(\d)\1\2)|(?:(\d)\3(\d)\4)|(?:(\d)(\d)\6\5)

因此,如果您有四位数字,则每个数字只能有两个不同的数字。使用\1,您可以引用第一个数字,第二个数字为\2,等等。此正则表达式匹配三个可能的分布:abababbaaabb

示例:https://regex101.com/r/cP4nI5/2

答案 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);