Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用新值替换字符串的一部分_C# - Fatal编程技术网

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

C# 用新值替换字符串的一部分,c#,C#,我有一个场景,需要用新文本替换字符串文本 例如,如果我的字符串是“01HW128120”,我将首先检查文本是否包含“01HW”,如果是,则将其替换为字符串“MachineID-” 所以最终我希望“01HW128120”成为“MachineID-128120”。有时我确实会得到字符串“1001HW128120”-在这种情况下,我还需要将“1001HW”替换为“MachineID-” 我尝试了下面的代码片段,但这不符合我的预期 string sampleText = "01HW128120"; if

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

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

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

string sampleText = "01HW128120";
if(sampleText.Contains("01HW"))
  sampleText = sampleText.Replace("01HW","MachineID-");
任何建议都会对我有很大帮助。

可能的搜索值很少 如果只有几个可能的组合,您可以简单地执行多个测试:

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;
    }
}
string value=“01HW128120”;
字符串替换=“MachineID-”;
var tokens=新列表{
“01HW”,
“1001HW”
//n此处的潜在搜索字符串数
};
foreach(令牌中的字符串令牌){
if(value.Contains(令牌)){
value=value.Replace(令牌,replacement);
打破
}
}
“智能”匹配 如果您有可管理数量的搜索字符串,但可能不需要精确匹配、不区分大小写、查找或捕获值来插入替换的字符串,则正则表达式非常适合替换字符串

一个非常简单的正则表达式,可以满足您的要求:
1001HW | 01HW

演示:

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

  • 断言字符串开头的位置
  • 匹配2-4个数字
  • 按字面意思匹配值“HW”

另请参见:

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

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

你可能想描述一下结果与你的期望有什么不同你的期望是什么?代码对我来说似乎很好,并且完全符合您的要求。外观和工作方式对我来说都很好。。