我有一个名为 file_test1.txt 的文件,我想从名称中提取 test1 并将其放在一个字符串中。这是最好的方法吗?
E.g。
string fullfile = @"C:\file_test1.txt";
string section = [test1] from fullfile; // <- expected result
我希望能够拆分'file _'和'。txt',因为'test1'部分可能更大或然而,'file _'和'。txt'总是相同的。
答案 0 :(得分:6)
尝试Path.GetFileNameWithoutExtension(fullfile).Substring(5)
(或Substring("TEMPLATE_PREFIX".Length)
)
答案 1 :(得分:2)
你可以尝试spilled
var test = Path.GetFileNameWithoutExtension(fullfile).split('_')[1];
答案 2 :(得分:1)
尝试以下
string fullfile = @"C:\file_test1.txt";
var name = fullfile.Substring(8,fullfile.Length-12)
当c:\ file_和.txt被修复时,您可以从索引8(跳过前导名称)开始,从字符串总长度的长度开始 - 12(12 =&gt;前导名称的长度和尾随扩展名)
答案 3 :(得分:1)
以为我会提供一个使用Split
的解决方案并处理具有多个下划线的文件:
string.Join("_", Path.GetFileNameWithoutExtension(file).Split('_').Skip(1));
答案 4 :(得分:0)
String.Split()适用于我的用途:
答案 5 :(得分: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);
}
}
答案 6 :(得分:0)
您还可以使用此正则表达式获取“test1”或任何后续文件名(假设您的文件命名约定保持不变!):
var defaultRegex = new Regex(@"(?<=_).*(?=.txt)");
var matches = defaultRegex.Matches(fullfile);
var match = matches[0].Value;
正则表达式:
(小于?= _)。*(?= TXT)
使用正面背后查找前面带有'_'的文本,并使用正向前导来查找前面有'.txt'的文本。