替换c#字符串中的字符

本文关键字:字符 字符串 替换 | 更新日期: 2023-09-27 18:07:59

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

"TestExample_serialNumber_Version_1.0_.pdf"

所有我想要的是最终产品是"serialNumber"。

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

我会想象它看起来像:

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

替换c#字符串中的字符

而不是"替换",只需使用正则表达式提取您想要的部分。比如:

(?: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;

作为regex的替代方法,您可以找到下划线的第一个实例,然后找到下划线的下一个实例,并取这些索引之间的子字符串。

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