1

我有一个看起来像这样的字符串:

3x3x3x204x4x4x6f

我想连续阅读这些字母,并想计算我看到相同模式的次数。例如,我看到 3x 发生了 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;
}
4

2 回答 2

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
于 2013-08-12T07:06:14.420 回答
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;
}
于 2013-08-12T07:08:07.713 回答