我有一个看起来像这样的字符串:
3x3x3x204x4x4x6f
我想连续阅读这些字母,并想要计算我看到相同模式的次数。例如,我看到3次发生了3次。我希望我的计数器然后重置并从它结束的位置开始,如果它再次像上面的那样看到一个模式,请给我重复计数。
我试过这个没有运气(我一次只读2个字符):
foreach (var set in splitString)
{
currChars = set;
if (!currChars.Contains(prevChars))
{
if (!currChars.Contains(_prevchars))
{
}
newSet.Add(_prevchar);
newSet.Add(occurrenceCount.ToString());
newSet.Add("x");
occurrenceCount = 0;
newSet.Add(currChars);
}
else
{
occurrenceCount = occurrenceCount + 2;
_prevchar = MethodX.StringManipulation.TruncateLongString(prevChars, 1);
_prevchars = currChars;
}
prevChars = currChars;
}
答案 0 :(得分:2)
不使用Regex,您可以使用接受起始位置参数的String.IndexOf
重载。对于您找到的模式的每次发生,相应地增加位置并再次搜索。
string s = "3x3x3x204x4x4x6f";
string pattern = "3x";
int count = 0;
int pos = 0;
while (true)
{
int index = s.IndexOf(pattern, pos);
if (index == -1) break;
count++;
pos = index + pattern.Length;
}
//count == 3
答案 1 :(得分:0)
var repeatList=Regex.Matches(input,@"(.+)(\1)+")
.Cast<Match>()
.Select(x=>
new {
name = x.Groups[1].Value,
count = x.Groups[2].Captures.Cast<Capture>().Count()+1
}
);
您现在可以迭代
foreach(var repeat in repeatList)
{
repeat.name;
repeat.count;
}