用于拆分字符串的高级正则表达式

时间:2016-06-08 11:37:41

标签: c# regex

我正在尝试编写一个高级的regrex,它会将我的字符串拆分到正确的位置。

你还记得old phones(T9),在那里你可以简单地做22022来写'bb' 我需要类似的东西。

我在空白处实现了分裂(实现了暂停),但剩下的就很难了。

对于空格,它是

var l = Regex.Split(a, @"\s");

但是我需要关注:44204420442 should be 44, 2, 0, 44, 2, 0, 44, 2 所以它会在角色与前一个角色相比发生变化之后进行分割。

提前谢谢!

2 个答案:

答案 0 :(得分:4)

不是拆分,而是收集所有匹配项更容易:

Regex regexObj = new Regex(@"(\d)\1*");
allMatchResults = regexObj.Matches(subjectString);

您需要查看每个Match对象的.Groups[0].Value才能获得整场比赛。

答案 1 :(得分:1)

您可以实现一个简单的循环,而不是复杂的正则表达式

public static IEnumerable<String> MySplit(String value) {
  if (null == value)
    throw new ArgumentNullException("value");

  char prior = '\0';

  StringBuilder sb = new StringBuilder();

  foreach (char current in value) {
    if (sb.Length != 0 && prior != current) {
      yield return sb.ToString();

      sb.Clear();
    }

    if (!Char.IsWhiteSpace(current))
      sb.Append(current);

    prior = current;
  }

  if (sb.Length > 0)
    yield return sb.ToString();
}

测试:

string value = "44204420442";
string[] parts = MySplit(value).ToArray(); // if you want an array

// 44, 2, 0, 44, 2, 0, 44, 2
Console.Write(String.Join(", ", parts));

string value2 = "44 44 42";

// 44, 44, 4, 2
Console.Write(String.Join(", ", MySplit(value2)));