仅在100%匹配时替换字符串

时间:2019-02-06 04:22:21

标签: c# .net

只是徘徊,仅在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

有人知道我该怎么做吗?

4 个答案:

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