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 に答える