除了我做的之外,还有更好的方法来修改这个字符串吗?

时间:2016-06-04 18:57:34

标签: c# regex string path

我有这样的字符串:

  

精灵\ /tilesTest.png

我想将 \ / / 交换,并删除扩展程序,因此它看起来像这样

  

精灵/ tilesTest

这就是我所做的:

string GetImageToLoadPath(string path)
{
    path = path.Replace("\\/", "/");
    path = path.Substring(0, path.LastIndexOf("."));
    return path;
}

有没有更好的方法呢?有没有办法使用正则表达式?

3 个答案:

答案 0 :(得分:1)

我根本不明白为什么你需要一个正则表达式。字符串函数对解决这类问题非常有帮助,我会按照你已经做过的事情做同样的事情,但可能会让它成为一个班轮说

string GetImageToLoadPath(string path)
{
    return path.Replace("\\/", "/").Substring(0, path.LastIndexOf("."));
}

答案 1 :(得分:1)

尝试以下代码,您可以从Regex.Replace Method (String, String)

获取更多详细信息
string input = @"Sprites\/tilesTest.png";
            string pattern = @"(\\)?(.png)?";
            string replacement = "";
            Regex rgx = new Regex(pattern);
            string result = rgx.Replace(input, replacement);

            Console.WriteLine("Original String: {0}", input);
            Console.WriteLine("Replacement String: {0}", result);

答案 2 :(得分:1)

我怀疑正则表达式是处理这样的文件路径的正确工具。

对于目录和文件名,Path.Combine(与Path.GetDirectoryNamePath.GetFileNameWithoutExtension一起)可能很方便,尤其是当目录分隔符未知时。对于\/替换,你做的方式似乎是最好的。

Path.Combine(Path.GetDirectoryName(s), Path.GetFileNameWithoutExtension(s))
    .Replace(@"\/", "/");

请参阅C# demo

using System;
using System.IO;

public class Test
{
    public static void Main()
    {
        var s = @"Sprites\/tilesTest.png";
        Console.Write(GetStr(s));
    }
    public static string GetStr(string s) {
        return Path.Combine(Path.GetDirectoryName(s), Path.GetFileNameWithoutExtension(s)).Replace(@"\/", "/");
    }
}

因此,Path.GetDirectoryName获取文件夹路径,Path.GetFileNameWithoutExtension获取文件名,但不包括扩展名,Path.Combine使用系统默认目录分隔符符号将名称加入路径