我需要在C#中替换文件名中的一系列字符。在做了很多搜索之后,我找不到一个很好的例子来替换两个特定字符之间的所有字符。例如,文件名为:
“TestExample_serialNumber_Version_1.0_.pdf”
我想要的只是最终产品“serialNumber”。
我是否可以使用特殊字符替换所有字符,包括第一个下划线?然后我可以再次运行replace方法来替换包括下一个下划线之后的所有内容?我听说过使用正则表达式但是我在Java中做了类似的事情,它似乎更容易实现。我不能理解C#中的字符串格式。
我认为它看起来像是:
name.Replace("T?_", "");//where ? equals any characters between
name.Replace("_?", "");
答案 0 :(得分:1)
而不是“替换”,只需使用正则表达式来提取所需的部分。类似的东西:
(?:TestExample_)(.*)(?:_Version)
会在捕获组中为您提供serialnumber
部分。
或者,如果TestExample
是可变的(在这种情况下,您需要更多具体关于您正在匹配的图案),您可能只会这样做:
(?:_)(.*)(?:_Version)
假设Version
部分 不变。
在C#
中,您可以执行以下操作:
var regex1 = new Regex("(?:TestExample_)(.*)(?:_Version)");
string testString = "TestExample_serialNumber_Version_1.0_.pdf";
string serialNum = regex1.Match(testString).Groups[1].Value;
答案 1 :(得分:0)
作为正则表达式的替代方法,您可以找到下划线的第一个实例,然后找到下划线的下一个实例,并在这些索引之间取出子串。
string myStr = "TestExample_serialNumber_Version_1.0_.pdf";
string splitStr = "_";
int startIndex = myStr.IndexOf(splitStr) + 1;
string serialNum = myStr.Substring(startIndex, myStr.IndexOf(splitStr, startIndex) - startIndex);