拆分包含前导数字的字符串以及之后的所有内容

时间:2012-03-21 09:54:27

标签: c# regex match

我有一个必须复制到新目录的文件列表。所有信息都在文件名中。每个原始文件名由[安装号] [新文件名]组成。例如:

235623bob.txt

此处安装号为235623,新文件名为bob.txt。安装号为1到11位,新文件名永远不会以数字开头。但它可以从任何其他合法字符开始,它可以包含第一个字符后面的数字。例如:

3245_6786bil54.txt

是3245作为安装号,_6786bil54.txt是新文件名。我尝试过以下操作:

private void BtnGo_Click(object sender, EventArgs e)
    {
        string inst_no = ""; // installation number
        string dest_filename = ""; // destination filename
        string dest_directory = "";

        string[] source_files = Directory.GetFiles(TxtSource.Text);

        // copy them to their new destination
        foreach (string file in source_files)
        {
            // source filename contains the instno and dest_filename.
            Match match = Regex.Match(file, @"(\d+)(\w+)"); 
            inst_no = match.Groups[0].Value; 
            dest_filename = match.Groups[1].Value;
            dest_directory = TxtDestination.Text + "\\" + inst_no;

            if (!Directory.Exists(dest_directory))
                Directory.CreateDirectory(dest_directory);

            File.Copy(file, dest_directory + "\\" + dest_filename);
        }
    }

问题在于:

inst_no = match.Groups[0].Value; 
dest_filename = match.Groups[1].Value;

1253hans.txt应该成为

inst_no=1253
dest_filename=hans

但它是

inst_no=1253hans
filename=1253

我对小组比赛有什么误解?

1 个答案:

答案 0 :(得分:6)

Groups[0]始终是完整匹配的字符串。 Groups[1]将是您的第一个小组 您的代码应如下所示:

inst_no = match.Groups[1].Value; 
dest_filename = match.Groups[2].Value;