将一个字符串拆分为前导数字和其后的所有数字

本文关键字:数字 一个 拆分 字符串 | 更新日期: 2023-09-27 18:28:24

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

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

我对小组赛有什么误解?

将一个字符串拆分为前导数字和其后的所有数字

Groups[0]始终是完全匹配的字符串。Groups[1]将是您的第一个子组
你的代码应该是这样的:

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