计算字符串中特定字母的出现次数

时间:2013-08-12 06:55:57

标签: c# regex string

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

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;
}

2 个答案:

答案 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;
}