如何提取文件名的一部分

时间:2017-02-20 20:53:28

标签: c# visual-studio ssis

我有一个以下模式的文件名,我想要提取文件的中间部分。(即20170217154436)。我如何在c#(或脚本任务)中执行此操作?

20170123-100046_20170217154436_A20170217210502

感谢任何帮助。

5 个答案:

答案 0 :(得分:3)

您可以使用正则表达式,但我认为您也可以这样继续:

String filename = "20170123-100046_20170217154436_A20170217210502";
String partToExtract = filename.Split('_')[1];

答案 1 :(得分:0)

这完全取决于您使用的文件名格式的一致性。我假设,您的示例########-######_##############_@##############是您的文件名格式。

在您的情况下,这应该是合适的,并避免使用数组。

String fileName = "20170123-100046_20170217154436_A20170217210502";
fileName = fileName.Substring(0, fileName.IndexOf("_") - 1);

这将在第0个元素和下划线之前的最后一个字符的索引之间采用子字符串。

答案 2 :(得分:0)

您可以使用正则表达式在两个字符之间获取字符串:__

string myStr= "20170123-100046_20170217154436_A20170217210502";
Regex r = new Regex(@"_(.+?)_");
MatchCollection mc = r.Matches(myStr);
Console.WriteLine("Fine name is " + mc[0].Groups[1].Value);

答案 3 :(得分:0)

如前所述Regex是一个选项,但由于它不是最易读的标准,我会选择更清晰,更强大的内容,例如:

const char  splitChar = '_';

String fileName = "20170123-100046_20170217154436_A20170217210502";
int valueIndexStart = fileName.IndexOf(splitChar);
int valueIndexEnd = fileName.LastIndexOf(splitChar);


if(valueIndexStart != -1 && valueIndexEnd != -1)
{
    //increment so as to trip splitChar from result
    valueIndexStart++;
    valueIndexEnd = valueIndexEnd-valueIndexStart;
    return fileName.Substring(valueIndexStart, valueIndexEnd);
}else{
    //throw exception?
}

当然,您需要考虑这种格式的标准。你说中间部分是你正在寻找的,总会有3个部分吗?如果找到更多或更少的分隔符,会发生什么?这个角色是否可以在价值角色中。我会告诉你如何处理潜在的误报或否定。

答案 4 :(得分:-1)

感谢您的回复。 我尝试了类似下面的东西,但它确实有效。

{{1}}

这给了我“20170217154436”。