-3

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

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

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

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

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

4

2 回答 2

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.

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

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

  • 在字符串开头断言位置
  • 匹配 2-4 位数字
  • 从字面上匹配值“HW”

另请参阅:Regex.Replace 方法

于 2013-04-05T04:27:39.663 回答
1

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

sampleText = Regex.Replace(sampleText, "^.*01HW", "MachineID-");
于 2013-04-05T04:41:38.373 回答