用新值替换字符串的一部分

时间:2013-04-05 04:10:01

标签: c#

我有一个场景,其中我需要用新文本替换字符串文字。

例如,如果我的字符串是“01HW128120”,我将首先检查文本是否包含“01HW”如果是,则将其替换为字符串“MachineID - ”。

所以最终我希望“01HW128120”成为“MachineID-128120”。有时我会把字符串作为“1001HW128120” - 在这种情况下我还需要用“MachineID-”替换“1001HW” 我尝试了下面的代码片段,但这并不符合我的预期。

string sampleText = "01HW128120";
if(sampleText.Contains("01HW"))
  sampleText = sampleText.Replace("01HW","MachineID-");

任何建议对我都有很大的帮助。

2 个答案:

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

&#34;更聪明&#34;匹配

如果您拥有可管理数量的搜索字符串,则正则表达式非常适合字符串替换,但您可能不需要完全匹配,不区分大小写,环视或捕获要插入到替换字符串中的值。

一个非常简单的正则表达式,符合您的要求:1001HW|01HW

演示:http://regexr.com?34djm

一个稍微聪明的正则表达式:^\d{2,4}HW

  • 在字符串开头处断言位置
  • 匹配2-4位数字
  • 匹配值&#34; HW&#34;字面上

另请参阅:Regex.Replace Method

答案 1 :(得分:1)

如果您只想用"01HW"替换"MachineID-"以外的所有内容,可以使用通用正则表达式:

sampleText = Regex.Replace(sampleText, "^.*01HW", "MachineID-");