0

我希望能够使用 RegEx 解析出 Windows 打印对话框等范围(例如 1-50,100-110,111,112)。以下是我当前的代码,我不清楚如何解析额外的逗号和数字。我可以解析出连字符,但不确定如何处理额外的逗号或连字符

private void tboxRowNum_Leave(object sender, EventArgs e)
{
    Regex.Replace(tboxRowNum.Text, @"(?<first>\d+)-(?<last>\d+)",
    new MatchEvaluator(this.parseSpaceDefinition));

}

private string parseSpaceDefinition(Match m)
{
    int first = int.Parse(m.Groups["first"].Value);
    int last = int.Parse(m.Groups["last"].Value);
    StringBuilder sb = new StringBuilder(first.ToString());

    for (int i = first + 1; i <= last; i++)
    {
        if (spaceItems == 0)
        {
            if (isNumeric(sb.ToString(),  System.Globalization.NumberStyles.Integer))
            {
                startingSpace = Convert.ToInt32(sb.ToString());
            }
        }

        sb.Append("," + i.ToString().Replace(" ", ""));

        spaceItems++;
        endingSpace = i;
    }

    tboxRowDesc.Text = sb.ToString();
    return sb.ToString();
}

编辑1:修改后的代码让我得到了我想要的:

private void tboxRowNum_Leave(object sender, EventArgs e)
{
    string[] parts = tboxRowNum.Text.Split(',');

    for (int i = 0; i < parts.Length; i++)
    {
        if (parts[i].IndexOf('-') >= 0)
        {
            Regex.Replace(parts[i], @"(?<first>\d+)-(?<last>\d+)",
            new MatchEvaluator(this.parseSpaceDefinition));
        }
        else
        {
            int number;
            if(!(int.TryParse(parts[i], out number))) 
            {
                MessageBox.Show("Incomplete/Invalid formula", "Invalid Space Definition");
                tboxRowDesc.Text = "";
            }
            else 
            {
                tboxRowDesc.Text += "," + number;
                spaceItems++;
            }
        }
    }
}
4

2 回答 2

3
string[] ranges = inputString.split(',');

foreach (string rangeCandidate in ranges) {
   // See if matches regex
}
于 2009-11-20T19:31:15.073 回答
1

首先用逗号分割它,然后检查每个部分是否与您的正则表达式匹配。如果确实如此,请执行您已经在做的事情,否则只需使用 int.Parse (或 int.TryParse 以获得稳健性)。

于 2009-11-20T19:31:05.383 回答