正则表达式计数不起作用

时间:2016-07-26 16:06:13

标签: c# asp.net regex

它继续发送缺失数字的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);
        }

    }
}

2 个答案:

答案 0 :(得分:1)

Regex.Matches.Count正常工作。

您需要替换

string s = textbox.ToString(); 

string s = textbox.Text;

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

此外,您只能将一个变量用于文本框值,并仅在必要时修剪它。

答案 1 :(得分:0)

我就是这样做的。我认为这样更清洁,更容易阅读:

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);
}

您对该输入字符串没有太多说法,因此您可能需要调整该正则表达式。我认为你期望术语之间的空格,并忽略第二个数字之后的任何内容。