计算与字符串中的模式匹配的标记数

时间:2013-03-23 13:31:52

标签: c# c++ regex pattern-matching

计算与字符串中的模式匹配的标记数量的方法。

令牌是“$”后跟“$$”,“$”和“$$”之间可以有任意数量的字符。

例如:"$123$$, $ab$$, $qqwe123$$

输入字符串可以是"$122$$dddd$1aasds$$"

对于上面的字符串,方法的输出应为2。

编程语言可以是C#或C ++。

这是我提出的代码,但试图找到最好的方法:

static int CalculateTokenCount()
        {
            string s = "$ab$$ask$$$$123$$";
            int tokenCount = 0;
            bool foundOneDollar = false;
            bool foundSecondDollar = false;

            if (string.IsNullOrEmpty(s))
            {
                return tokenCount;
            }
            for (int i = 0, x = 0; i < s.Length; i++)
            {
                if (s[i] == '$' && !foundOneDollar)
                {
                    foundOneDollar = true;
                    continue;
                }

                if (foundOneDollar)
                {
                    if (s[i] == '$' && !foundSecondDollar)
                    {
                        foundSecondDollar = true;
                        continue;
                    }
                }

                if (foundSecondDollar)
                {
                    if (s[i] == '$')
                    {
                        tokenCount++;
                    }  
                    foundSecondDollar = false;
                }
            }
            Console.WriteLine(tokenCount);
            return tokenCount;
        }

2 个答案:

答案 0 :(得分:1)

看一下像

这样的东西

Regex.Matches Method (String)

  

在指定的输入字符串中搜索所有出现的常规字符串   表达

也许可以查看Regular Expression Language - Quick Reference

答案 1 :(得分:0)

您可以使用以下正则表达式

\$.*?\$\$

这将检测之间的任何个字符数,甚至是零个字符。如果您需要至少一个字符,请将*替换为+

正如@astander所说,要检索匹配计数,请使用Regex.Matches

string input = "$122$$dddd$1aasds$$";
string pattern = @"\$.*?\$\$";
Regex rgx = new Regex(pattern);
MatchCollection matches = rgx.Matches(input);
int count = matches.Count();