我有一个名为file_test1.txt的文件,我想从名称中提取test1并将其放在一个字符串中。这样做的最佳方法是什么?
例如
string fullfile = @"C:\file_test1.txt";
string section = [test1] from fullfile; // <- expected result
我希望能够拆分“file_”和“.txt”,因为“test1”部分可能更大或更小,但“file_”和“.txt”将始终相同。
尝试Path.GetFileNameWithoutExtension(fullfile).Substring(5)
(或Substring("TEMPLATE_PREFIX".Length)
)
你可以试试洒
var test = Path.GetFileNameWithoutExtension(fullfile).split('_')[1];
尝试关注
string fullfile = @"C:\file_test1.txt";
var name = fullfile.Substring(8,fullfile.Length-12)
由于 c:\file_ 和 .txt 是固定的,您可以使用从索引 8 开始的子字符串(跳过前导名称),直到总字符串长度的长度 - 12(12 => 前导名称的长度和尾随扩展名)
以为我会给出一个使用Split
和处理带有多个下划线的文件的解决方案:
string.Join("_", Path.GetFileNameWithoutExtension(file).Split('_').Skip(1));
String.Split() 非常适合我的用途:
您还可以使用以下正则表达式获取“test1”或任何后续文件名(假设您的文件命名约定保持不变!):
var defaultRegex = new Regex(@"(?<=_).*(?=.txt)");
var matches = defaultRegex.Matches(fullfile);
var match = matches[0].Value;
正则表达式:
(?<=_).*(?=.txt)
使用正向向后查找以“_”开头的文本,并使用正向向前查找以查找前面有“.txt”的文本。
显然有很多方法可以做到这一点。这是另一种方法:
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);
}
}