1

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

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

例如:"$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;
        }
4

2 回答 2

1

看看使用类似的东西

Regex.Matches 方法(字符串)

在指定的输入字符串中搜索所有出现的正则表达式。

也可以看看正则表达式语言 - 快速参考

于 2013-03-23T13:33:57.920 回答
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();
于 2013-03-23T13:55:48.387 回答