Regex计数不起作用

本文关键字:不起作用 Regex | 更新日期: 2023-09-27 17:58:37

它一直转到"缺少数字"的else语句。如果我输入"The",它会读取,但当我输入两个数字时,它表示计数仍然是0。然后将返回else语句,而不是继续并更改标签。为什么?

protected void submit_Click(object sender, EventArgs e)
{
    string input = textbox.Text;
    string s = textbox.ToString();
    input = input.Trim();
    MatchCollection matches = Regex.Matches(s, @"'d+");
    string[] result = matches.Cast<Match>()
                                .Take(2)
                                .Select(match => match.Value)
                                .ToArray();
    if (input.StartsWith("The") || input.StartsWith("the"))
    {
        if (matches.Count == 2)
        {
            alarm.Text = result[0];
            server.Text = result[1];
        }
        else
        {
            string script = "alert('"Missing Number(s)!'");";
            ScriptManager.RegisterStartupScript(this, GetType(),
                                    "ServerControlScript", script, true);
        }
    }
}

Regex计数不起作用

Regex.Matches.Count工作正常。

您需要更换

string s = textbox.ToString(); 

带有

string s = textbox.Text;

否则,您将分析不同的字符串(textbox类型的字符串)。

此外,您可以仅使用一个变量作为文本框值,并仅在必要时对其进行修剪。

我会这样做。我认为这样会更干净、更容易阅读:

string input = textbox.Text.Trim();
var match = Regex.Match(input, @"^[tT]he's('d+)'s('d+)'b");
if (match.Success && match.Groups.Count == 3)
{
    var alarm = match.Groups[1].Value;
    var server = match.Groups[2].Value;
}
else
{
    string script = "alert('"Missing Number(s)!'");"; // Or "invalid format".
    ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", script, true);
}

您没有说太多关于输入字符串的内容,所以您可能需要调整正则表达式。我想你应该在术语之间留空格,忽略第二个数字之后的任何内容。