在字符串中查找数字模式并将其删除

时间:2014-04-11 19:39:48

标签: c# regex

我需要从字符串中删除一个模式,我认为正则表达式可以完成这项工作,但我无法解决这个问题。

模式必须位于字符串的末尾。

string fileName = "File (123)";
string pattern = " (0)";
string cleanName = PatternRemover(fileName, pattern);
//Should result in: cleanName == "File"

编辑: 好的,这是我在你的答案后现在使用的代码:

    public static string GetNextFilePath2(string fullPath, ref uint id, string idFormat)
    {
        string dir = Path.GetDirectoryName(fullPath);
        string ext = Path.GetExtension(fullPath);
        string fileNameNoExt = Path.GetFileNameWithoutExtension(fullPath);
        if (ext.Length > 0 && ext[0] != '.')
            ext = "." + ext;

        string baseName = Regex.Replace(fileNameNoExt, @"\s\(\d+\)", "");

        string fileName = baseName + " (" + id.ToString(idFormat) + ")" + ext;
        string path = Path.Combine(dir, fileName);
        while (File.Exists(path))
        {
            id++;
            fileName = baseName + " (" + id.ToString(idFormat) + ")" + ext;
            path = Path.Combine(dir, fileName);
        }
        return path;
    }

它有效,但是:

  1. 它始终从id算起,我认为开始可能会更好 来自文件名号。
  2. 我正在跳过使用"(0)"作为一个方法参数,它将指示要删除的模式以及"("将被参数化。我正在做它"手动"现在在这一行:string fileName = baseName +"(" + id.ToString(idFormat)+")" + ext;

3 个答案:

答案 0 :(得分:6)

你可以在没有REGEX的情况下做到这一点:

string newFileName = new String(fileName
                               .Where(r => !char.IsDigit(r)
                                           && r != '('
                                           && r != ')'
                                           && r != ' ').ToArray());

这会给你File.jpg

如果您只想获取文件名,则可以使用:

string fileNameWithoutPath = Path.GetFileNameWithoutExtension(newFileName);
// it would give you `File`

答案 1 :(得分:3)

使用正则表达式:

var subject = "File (123).jpg";
var fileNameWithExtension = Regex.Replace(subject,@"\s*\(\d+\)","");
var fileNameWithoutPath = Path.GetFileNameWithoutExtension(fileNameWithExtension);

感谢@habib,我没有带Path.GetFileNameWithoutExtension来剥离扩展程序。

答案 2 :(得分:0)

您可以使用:

\s\(\d+\)\.jpg

假设您确实希望删除扩展程序并且扩展程序始终为“.jpg”。否则:

\s\(\d+\)

在空格中查找括号中的一组数字。