myfinename_slice_1.tif
myfilename_slice_2.tif
...
...
myfilename_slice_15.tif
...
...
myfilename_slice_210.tif
在C#中,如何獲得文件索引,如「1」,「2」,「15」,「210」使用字符串操作?C#字符串操作。獲取文件名子字符串
myfinename_slice_1.tif
myfilename_slice_2.tif
...
...
myfilename_slice_15.tif
...
...
myfilename_slice_210.tif
在C#中,如何獲得文件索引,如「1」,「2」,「15」,「210」使用字符串操作?C#字符串操作。獲取文件名子字符串
你有一些選擇:
Regex
類正則表達式;String.Split
。最重要的是你可以對文件名的格式做出什麼假設。
例如,如果它總是在文件名的末尾,不計擴展和下劃線後,你可以這樣做:
var id = Path.GetFileNameWithoutExtension("myfinename_slice_1.tif")
.Split('_')
.Last();
Console.WriteLine(id);
例如,如果你可以假設標識符是保證出現在文件名和[0-9]
只允許在文件名顯示爲標識符的一部分的字符,你可以這樣做:
var id = Regex.Match("myfinename_slice_1.tif", @"\d+").Value;
Console.WriteLine(id);
可能有更多的方式來做到這一點,但最重要的是要斷言哪些假設你可以製作並編碼基於它們的實現。
您可以使用正則表達式"(?<digits>\d+)\.[^\.]+$"
,如果這是一個比賽,你要查找的字符串是一個名爲組中的「數字」
String.Split('_')[2].Split('.')[0]
你是指'[2]'? –
這看起來像正則表達式的工作。首先將模式定義爲正則表達式:
.*?_(?<index>\d+)\.tif
然後獲得對您的字符串的匹配。命名index
該組將包含數字:
var idx = Regex.Match(filename, @".*?_(?<index>\d+)\.tif").Groups["index"].Value;
這裏是將處理的方法:
公衆詮釋GetFileIndex(字符串argFilename) { 回報Int32.Parse(argFilename.Substring(argFilename。 LastIndexOf(「_」)+ 1,argFilename.LastIndexOf(「。」))); }
享受
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var s1 = "myfinename_slice_1.tif";
var s2 = "myfilename_slice_2.tif";
var s3 = "myfilename_slice_15.tif";
var s4 = "myfilename_slice_210.tif";
var s5 = "myfilena44me_slice_210.tif";
var s6 = "7myfilena44me_slice_210.tif";
var s7 = "tif999";
Assert.AreEqual(1, EnumerateNumbers(s1).First());
Assert.AreEqual(2, EnumerateNumbers(s2).First());
Assert.AreEqual(15, EnumerateNumbers(s3).First());
Assert.AreEqual(210, EnumerateNumbers(s4).First());
Assert.AreEqual(210, EnumerateNumbers(s5).Skip(1).First());
Assert.AreEqual(210, EnumerateNumbers(s6).Skip(2).First());
Assert.AreEqual(44, EnumerateNumbers(s6).Skip(1).First());
Assert.AreEqual(999, EnumerateNumbers(s7).First());
}
static IEnumerable<int> EnumerateNumbers(string input)
{
var digits = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
string result = string.Empty;
foreach (var c in input.ToCharArray())
{
if (!digits.Contains(c))
{
if (!string.IsNullOrEmpty(result))
{
yield return int.Parse(result);
result = string.Empty;
}
}
else
{
result += c;
}
}
if (result.Length > 0)
yield return int.Parse(result);
}
}
描述您的參數。數字總是出現在文件名的末尾,在文件擴展名之前,出現在下劃線之後? –
@micheal,是的,數字總是出現在擴展之前,以及在slice_之後,但可能是1位數字或2或3位數字。 –