我有一个场景,其中我需要用新文本替换字符串文字。
例如,如果我的字符串是“01HW128120”,我将首先检查文本是否包含“01HW”如果是,则将其替换为字符串“MachineID - ”。
所以最终我希望“01HW128120”成为“MachineID-128120”。有时我会把字符串作为“1001HW128120” - 在这种情况下我还需要用“MachineID-”替换“1001HW” 我尝试了下面的代码片段,但这并不符合我的预期。
string sampleText = "01HW128120";
if(sampleText.Contains("01HW"))
sampleText = sampleText.Replace("01HW","MachineID-");
任何建议对我都有很大的帮助。
答案 0 :(得分:1)
如果只有几种可能的组合,您可以简单地进行多项测试:
string value = "01HW128120";
string replacement = "MachineID-";
if( value.Contains( "01HW" ) ) {
value = value.Replace( "01HW", replacement );
}
else if( value.Contains( "1001HW" ) ) {
value = value.Replace( "1001HW", replacement );
}
Assert.AreEqual( "MachineID-128120", value );
当然,如果你有大量的可能性,这种方法很快变得笨拙。另一种方法是将所有搜索字符串保留在列表中。
string value = "01HW128120";
string replacement = "MachineID-";
var tokens = new List<string> {
"01HW",
"1001HW"
// n number of potential search strings here
};
foreach( string token in tokens ) {
if( value.Contains( token ) ) {
value = value.Replace( token, replacement );
break;
}
}
如果您拥有可管理数量的搜索字符串,则正则表达式非常适合字符串替换,但您可能不需要完全匹配,不区分大小写,环视或捕获要插入到替换字符串中的值。
一个非常简单的正则表达式,符合您的要求:1001HW|01HW
。
一个稍微聪明的正则表达式:^\d{2,4}HW
另请参阅:Regex.Replace Method
答案 1 :(得分:1)
如果您只想用"01HW"
替换"MachineID-"
以外的所有内容,可以使用通用正则表达式:
sampleText = Regex.Replace(sampleText, "^.*01HW", "MachineID-");