摆脱文件名中的*连续*句点

yea*_*mok 2 c#

我想知道如果我有一个文件名,我将如何摆脱文件名中的句点:

测试.... 1.txt看起来像Test 1.txt?我不希望触及像1.0.1 Test.txt这样的文件.只有具有连续句点的文件才应替换为空格.有任何想法吗?

这是我当前的代码,但正如您所看到的,它取代了扩展名称中的句点之外的每个句点:

 public void DoublepCleanUp(List<string> doublepFiles)
    {
        Regex regExPattern2 = new Regex(@"\s{2,}");
        Regex regExPattern4 = new Regex(@"\.+");
        Regex regExPattern3 = new Regex(@"\.(?=.*\.)");
        string replace = " ";
        List<string> doublep = new List<string>();
        var filesCount = new Dictionary<string, int>();

        try
        {
            foreach (string invalidFiles in doublepFiles)
            {
                string fileOnly = System.IO.Path.GetFileName(invalidFiles);
                string pathOnly = System.IO.Path.GetDirectoryName(fileOnly);

                if (!System.IO.File.Exists(fileOnly))
                {
                    string filewithDoublePName = System.IO.Path.GetFileName(invalidFiles);
                    string doublepPath = System.IO.Path.GetDirectoryName(invalidFiles);
                    string name = System.IO.Path.GetFileNameWithoutExtension(invalidFiles);
                    //string newName = name.Replace(".", " ");
                    string newName = regExPattern4.Replace(name, replace);
                    string newName2 = regExPattern2.Replace(newName, replace);
                    string filesDir = System.IO.Path.GetDirectoryName(invalidFiles);
                    string fileExt = System.IO.Path.GetExtension(invalidFiles);
                    string fileWithExt = newName2 + fileExt;
                    string newPath = System.IO.Path.Combine(filesDir, fileWithExt);
                    System.IO.File.Move(invalidFiles, newPath);


                    DataGridViewRow clean = new DataGridViewRow();
                    clean.CreateCells(dataGridView1);
                    clean.Cells[0].Value = doublepPath;
                    clean.Cells[1].Value = filewithDoublePName;
                    clean.Cells[2].Value = fileWithExt;
                    dataGridView1.Rows.Add(clean);
                }

                else
                {
                    if (filesCount.ContainsKey(fileOnly))
                    {
                        filesCount[fileOnly]++;
                    }
                    else
                    {
                        filesCount.Add(fileOnly, 1);
                        string newFileName = String.Format("{0}{1}{2}",
                            System.IO.Path.GetFileNameWithoutExtension(fileOnly),
                            filesCount[fileOnly].ToString(),
                            System.IO.Path.GetExtension(fileOnly));

                        string newFilePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(fileOnly), newFileName);
                        System.IO.File.Move(fileOnly, newFilePath);

                        DataGridViewRow clean = new DataGridViewRow();
                        clean.CreateCells(dataGridView1);
                        clean.Cells[0].Value = pathOnly;
                        clean.Cells[1].Value = fileOnly;
                        clean.Cells[2].Value = newFileName;
                        dataGridView1.Rows.Add(clean);
                    }

                }
            }
        }
         catch(Exception e)
         {
         //throw;
             StreamWriter doublepcleanup = new StreamWriter(@"G:\DoublePeriodCleanup_Errors.txt");
             doublepcleanup.Write("Double Period Error: " + e + "\r\n");
             doublepcleanup.Close();
         }

        }
Run Code Online (Sandbox Code Playgroud)

jjn*_*guy 7

好吧,用字符串做到这一点:

string st = "asdf..asdf...asfd...asdf.asf.asdf.s.s";
Regex r = new Regex("\\.\\.+");
st = r.Replace(st, " ");
Run Code Online (Sandbox Code Playgroud)

这将用'.'空格替换2个或更多个s的任何实例.

我会把它扔进一个方法:

public static string StringReplace(string original, 
                                   string regexMatch, string replacement) {
    Regex r = new Regex(regexMatch);
    return r.Replace(original, replacement);
}
Run Code Online (Sandbox Code Playgroud)


Vic*_*aci 7

string name = "Text...1.txt";   
Regex r = new Regex("[.][.]+");
string result = r.Replace(name, " ");
Run Code Online (Sandbox Code Playgroud)


snu*_*rre 5

这个怎么样?

string newFileName = String.Join(".", fileName.Split('.').Select(p => !String.IsNullOrEmpty(p) ? p : " ").ToArray())
Run Code Online (Sandbox Code Playgroud)