我需要从字符串中删除一个模式,我认为正则表达式可以完成这项工作,但我无法解决这个问题。
模式必须位于字符串的末尾。
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;
}
它有效,但是:
答案 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+\)
在空格中查找括号中的一组数字。