替换字符串C#中的字符

时间:2014-06-09 13:57:53

标签: c# string replace

我需要在C#中替换文件名中的一系列字符。在做了很多搜索之后,我找不到一个很好的例子来替换两个特定字符之间的所有字符。例如,文件名为:

“TestExample_serialNumber_Version_1.0_.pdf”

我想要的只是最终产品“serialNumber”。

我是否可以使用特殊字符替换所有字符,包括第一个下划线?然后我可以再次运行replace方法来替换包括下一个下划线之后的所有内容?我听说过使用正则表达式但是我在Java中做了类似的事情,它似乎更容易实现。我不能理解C#中的字符串格式。

我认为它看起来像是:

name.Replace("T?_", "");//where ? equals any characters between
name.Replace("_?", "");

2 个答案:

答案 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);