【发布时间】: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) 来替换然后拆分。