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

次の正規表現を使用できます

\$.*?\$\$

これにより、間にある任意の数の文字が検出されます。ゼロ文字も検出されます。少なくとも 1 文字が必要な場合は*+.

@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 に答える