计数字符串中与模式匹配的令牌数量

本文关键字:令牌 模式匹配 数字 字符串 | 更新日期: 2023-09-27 18:05:21

计算字符串中匹配一个模式的记号个数的方法。

token是"$"后面跟着"$$","$"answers"$$"之间可以有任意数目的字符。

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

计数字符串中与模式匹配的令牌数量

看看如何使用

正则表达式。匹配方法(字符串)

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

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

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

'$.*?'$'$

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

正如@astander已经说过的,要检索匹配计数使用Regex.Matches

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