选择字符串C#的特定部分

时间:2011-07-21 15:21:06

标签: c# .net windows

我正在尝试创建一个新字符串,从现有字符串中删除某些字符,例如

string path = "C:\test.txt"

所以字符串“pathminus”会取出“C:\”,例如

string pathminus = "test.txt"

9 个答案:

答案 0 :(得分:12)

使用Path.GetFileName

例如:

string pathminus = Path.GetFileName(path);

答案 1 :(得分:11)

有很多方法可以删除字符串的某个部分。这有几种方法可以做到:

var path = @"C:\test.txt";
var root = @"C:\";

使用string.Remove()

var pathWithoutRoot = path.Remove(0, root.Length);
Console.WriteLine(pathWithoutRoot);                // prints test.txt

使用string.Replace()

pathWithoutRoot = path.Replace(root, "");
Console.WriteLine(pathWithoutRoot);                // prints test.txt

使用string.Substring()

pathWithoutRoot = path.Substring(root.Length);
Console.WriteLine(pathWithoutRoot);                // prints test.txt

使用Path.GetFileName()

pathWithoutRoot = Path.GetFileName(path);
Console.WriteLine(pathWithoutRoot);                // prints test.txt

您也可以使用正则表达式来查找和替换字符串的某些部分,但这有点困难。 You can read on MSDN on how to use Regular Expressions in C#.

以下是有关如何使用string.Remove()string.Replace()string.Substring()Path.GetFileName()Regex.Replace()的完整示例:

using System;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = @"C:\test.txt";
            var root = @"C:\";

            var pathWithoutRoot = path.Remove(0, root.Length);
            Console.WriteLine(pathWithoutRoot);

            pathWithoutRoot = Path.GetFileName(path);
            Console.WriteLine(pathWithoutRoot);

            pathWithoutRoot = path.Replace(root, "");
            Console.WriteLine(pathWithoutRoot);

            pathWithoutRoot = path.Substring(root.Length);
            Console.WriteLine(pathWithoutRoot);

            var pattern = "C:\\\\";
            var regex = new Regex(pattern);

            pathWithoutRoot = regex.Replace(path, "");
            Console.WriteLine(pathWithoutRoot);
        }
    }
}

这一切都取决于你想要对字符串做什么,在这种情况下你可能只想删除C:\但下次你可能想要用字符串做其他类型的操作,也许删除尾部或者说,以上不同的方法可能会帮助你。

答案 2 :(得分:3)

字符串类提供了各种方法来实现此目的。

如果您想通过删除前三个字符将“C:\ test.txt”更改为“test.txt”:

path.Substring(3);

如果要从字符串中的任何位置删除“C:\”:

path.Replace("C:\", "");

或者,如果您特别需要文件名,无论路径有多长:

Path.GetFileName(path);

根据您的意图,有很多方法可以做到这一点。我更喜欢使用静态类Path

答案 3 :(得分:2)

对于这个具体的例子,我会研究Path类。举个例子,你可以打电话:

string pathminus = Path.GetFileName(path);

答案 4 :(得分:1)

您是否查看了Substring方法?

答案 5 :(得分:0)

如果字符串实际上是文件路径,请使用Path.GetFileName方法获取文件名的一部分。

答案 6 :(得分:0)

path.SubString(path.IndexOf('\'))

答案 7 :(得分:0)

你想要System.Text.RegularExpressions.Regex,但你到底想要做什么呢?

最简单的形式:

    [TestMethod]
    public void RemoveDriveFromPath()
    {
        string path = @"C:\test.txt";

        Assert.AreEqual("test.txt", System.Text.RegularExpressions.Regex.Replace(path, @"^[A-Z]\:\\", string.Empty));
    }

您是否只是尝试获取没有路径的文件的文件名?

若是,请改为:

    [TestMethod]
    public void GetJustFileName()
    {
        string path = @"C:\test.txt";

        var fileInfo = new FileInfo(path);

        Assert.AreEqual("test.txt", fileInfo.Name);
    }

答案 8 :(得分:0)

对于更一般的字符串,请使用string.Split(inputChar),它将字符作为参数,并将字符串拆分为string[],无论在哪里找到inputChar。

string[] stringArr = path.Split('\\'); // need double \ because \ is an escape character
// you can now concatenate any part of the string array to get what you want. 
// in this case, it's just the last piece
string pathminus = stringArr[stringArr.Length-1];