【问题标题】:Issue with Regex.SplitRegex.Split 的问题
【发布时间】:2017-11-22 09:17:04
【问题描述】:

所以我试图检查一个字符串是否遵循这样的模式:abbccc,其中每个字母出现的次数与其设定位置指示的次数一样多。所以我想用这种模式分割字符串:(?<=(\w))(?=\w)(?!\1) 并从那里继续。问题是,特别是对于上述字符串(但对于其他字符串),我得到了 5 个带有Regex.Split 的字符串:a, a, bb, b, ccc,而不是a, bb, ccc,这是我所期望的。我认为正则表达式有问题,但Regex.Replace 工作正常,返回a_bb_ccc。可能是什么问题?

【问题讨论】:

  • 您使用Regex.Split 使其过于复杂(有一个捕获组,该捕获的值也成为结果数组的一部分)。使用Regex.Matches(s, @"(\w)\1*").Cast<Match>().Select(x => x.Value).ToList()
  • 如果替换工作不能替换然后分裂离子_ ?
  • @EpicKip 当然,但这不是我的问题。
  • 请详细说明您感兴趣的内容、解决方案、解释为什么您会在输出数组中获得更多值,或者两者兼而有之? !@#abb--ccc33 的预期结果是什么?
  • 实际上,@EpicKip 的想法在这种情况下可能是最好的。只需选择一个不常用的符号,例如\u200C (ZWNJ) 来替换然后拆分。

标签: c# regex


【解决方案1】:

你可以使用它:

(.)\1*

你得到 3 个匹配 a, bb, ccc

Demo

示例源 (run here)

    string pattern = @"(.)\1*";
    string input = @"abbccc";

    foreach (Match m in Regex.Matches(input, pattern))
        Console.WriteLine(m.Value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多