计算与字符串中的模式匹配的标记数量的方法。
令牌是“$”后跟“$$”,“$”和“$$”之间可以有任意数量的字符。
例如:"$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;
}
答案 0 :(得分:1)
看一下像
这样的东西在指定的输入字符串中搜索所有出现的常规字符串 表达
答案 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();