C# 用新值替换字符串的一部分
我有一个场景,需要用新文本替换字符串文本 例如,如果我的字符串是“01HW128120”,我将首先检查文本是否包含“01HW”,如果是,则将其替换为字符串“MachineID-” 所以最终我希望“01HW128120”成为“MachineID-128120”。有时我确实会得到字符串“1001HW128120”-在这种情况下,我还需要将“1001HW”替换为“MachineID-” 我尝试了下面的代码片段,但这不符合我的预期C# 用新值替换字符串的一部分,c#,C#,我有一个场景,需要用新文本替换字符串文本 例如,如果我的字符串是“01HW128120”,我将首先检查文本是否包含“01HW”,如果是,则将其替换为字符串“MachineID-” 所以最终我希望“01HW128120”成为“MachineID-128120”。有时我确实会得到字符串“1001HW128120”-在这种情况下,我还需要将“1001HW”替换为“MachineID-” 我尝试了下面的代码片段,但这不符合我的预期 string sampleText = "01HW128120"; if
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-");
你可能想描述一下结果与你的期望有什么不同你的期望是什么?代码对我来说似乎很好,并且完全符合您的要求。外观和工作方式对我来说都很好。。