我正在尝试编写一个高级的regrex,它会将我的字符串拆分到正确的位置。
你还记得old phones(T9),在那里你可以简单地做22022来写'bb' 我需要类似的东西。
我在空白处实现了分裂(实现了暂停),但剩下的就很难了。
对于空格,它是
var l = Regex.Split(a, @"\s");
但是我需要关注:44204420442 should be 44, 2, 0, 44, 2, 0, 44, 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)));