只是徘徊,仅在c#.net中100%匹配时才如何替换字符串?例如,我有以下字符串:
StringBuilder a = new(StringBuilder);
a = "ABC-1 ABC-1.1 ABC-1.1~1"
我正在使用以下脚本替换字符串:
a.Replace("ABC-1", "ABC-2");
此刻输出如下:
ABC-2 ABC-2.1 ABC-2.1~1
相反,我要查找的输出是:
ABC-2 ABC-1.1 ABC-1.1~1
有人知道我该怎么做吗?
答案 0 :(得分:4)
这可能有帮助:
var a = "ABC-1 ABC-1.1 ABC-1.1~1";
var result = String.Join(" ", a.Split(' ').Select(x=>x=="ABC-1"? "ABC-2":x));
结果:
"ABC-2 ABC-1.1 ABC-1.1~1"
答案 1 :(得分:3)
如果您的输入中没有标有单词结尾的标点符号,那么链接到的“ duplicate”将是一个很好的解决方案。因此该线程中的正则表达式无法按原样工作。
不过您应该可以使用negative lookahead。
var a = "ABC-1 ABC-1.1 ABC-1.1~1";
a = Regex.Replace(a, @"\bABC-1\b(?!\S)", "ABC-2");
Console.WriteLine(a); // ABC-2 ABC-1.1 ABC-1.1~1
它基本上断言搜索词之后的字符不是非空格字符(如果是字符串的末尾,也可以匹配)。
答案 2 :(得分:1)
如果您只想替换第一次出现的情况,此方法可以为您提供帮助:
public static string ReplaceFirst(this string original, string oldValue, string newValue)
{
var index = original.IndexOf(oldValue);
if (index >= 0) {
var prev = original.Substring(0, index);
var after = original.Substring(index + oldValue.Length);
return prev + newValue + after;
}
return original;
}
答案 3 :(得分:0)
要匹配确切的单词,请使用正则表达式@"(^|\s)ABC-1.1(\s|$)";
string a = "ABC-1 ABC-1.1 ABC-1.1~1";
string pattern = @"(^|\s)ABC-1.1(\s|$)";
string replace = Regex.Replace(a, pattern , " test ");
Console.WriteLine(replace);
输出ABC-1 test ABC-1.1~1