1

我有一个名为file_test1.txt的文件,我想从名称中提取test1并将其放在一个字符串中。这样做的最佳方法是什么?

例如

string fullfile = @"C:\file_test1.txt";
string section = [test1] from fullfile;      // <- expected result

我希望能够拆分“file_”“.txt”,因为“test1”部分可能更大或更小,但“file_”“.txt”将始终相同。

4

7 回答 7

6

尝试Path.GetFileNameWithoutExtension(fullfile).Substring(5)(或Substring("TEMPLATE_PREFIX".Length)

于 2013-10-04T22:44:09.780 回答
2

你可以试试洒

 var test = Path.GetFileNameWithoutExtension(fullfile).split('_')[1]; 
于 2013-10-04T22:44:29.370 回答
1

尝试关注

string fullfile = @"C:\file_test1.txt";
var name = fullfile.Substring(8,fullfile.Length-12)

由于 c:\file_ 和 .txt 是固定的,您可以使用从索引 8 开始的子字符串(跳过前导名称),直到总字符串长度的长度 - 12(12 => 前导名称的长度和尾随扩展名)

于 2013-10-04T22:44:42.600 回答
1

以为我会给出一个使用Split和处理带有多个下划线的文件的解决方案:

string.Join("_", Path.GetFileNameWithoutExtension(file).Split('_').Skip(1));
于 2013-10-04T23:01:35.510 回答
0

String.Split() 非常适合我的用途:

http://msdn.microsoft.com/en-us/library/b873y76a.aspx

于 2013-10-04T22:45:01.997 回答
0

您还可以使用以下正则表达式获取“test1”或任何后续文件名(假设您的文件命名约定保持不变!):

var defaultRegex = new Regex(@"(?<=_).*(?=.txt)");

var matches = defaultRegex.Matches(fullfile);

var match = matches[0].Value;

正则表达式:

(?<=_).*(?=.txt)

使用正向向后查找以“_”开头的文本,并使用正向向前查找以查找前面有“.txt”的文本。

于 2013-10-04T23:07:36.677 回答
0

显然有很多方法可以做到这一点。这是另一种方法:

        string fullfile = @"C:\file_test1.txt";
        int index1 = fullfile.LastIndexOf("file_");
        if (index1 != -1)
        {
            int index2 = fullfile.IndexOf(".", index1);
            if (index2 != -1)
            {
                string section = fullfile.Substring(index1 + 5, index2 - index1 - 5);
            }
        }
于 2013-10-04T22:51:12.930 回答