我有一个文件名在下面的模式,我想提取文件的中间部分(即20170217154436)。我如何做到这一点在C#(或脚本任务)?如何提取部分文件名
20170123-100046_20170217154436_A20170217210502
任何帮助表示赞赏。
我有一个文件名在下面的模式,我想提取文件的中间部分(即20170217154436)。我如何做到这一点在C#(或脚本任务)?如何提取部分文件名
20170123-100046_20170217154436_A20170217210502
任何帮助表示赞赏。
您可以使用正则表达式,但我想你也可以这样进行:
String filename = "20170123-100046_20170217154436_A20170217210502";
String partToExtract = filename.Split('_')[1];
这完全取决于你所使用的文件名格式的一致性。假设你的例子########-######_##############[email protected]##############
是你文件名的格式。
在你的情况下,这应该是合适的,并避免使用数组。
String fileName = "20170123-100046_20170217154436_A20170217210502";
fileName = fileName.Substring(0, fileName.IndexOf("_") - 1);
这需要在第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);
如前所述正则表达式是一种选择,而是因为它是不是最可读的标准我想的东西更清晰,更走鲁棒如:
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个部分?如果发现更多或更少的分隔符,会发生什么情况?这个角色可以在一个价值角色内吗?尽管如何处理潜在的假阳性或阴性,我会留给你。
谢谢你的回复。 我试过下面的东西,它的工作。
String fileName = "20170123-100046_20170217154436_A20170217210502";
fileName = filename.Substring(filename.IndexOf("_") + 1);
string fname;
fname=fileName.Substring(0, fileName .IndexOf("_"))
这给了我“20170217154436”。
它总是有这种格式吗? –