首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当100%匹配时才替换字符串

仅当100%匹配时才替换字符串
EN

Stack Overflow用户
提问于 2019-02-06 12:22:21
回答 4查看 240关注 0票数 2

在c# .net?For示例中,我有以下字符串,如何才能在100%匹配时替换字符串:

代码语言:javascript
复制
StringBuilder a = new(StringBuilder);     
a = "ABC-1 ABC-1.1 ABC-1.1~1"

我使用以下脚本替换字符串:

代码语言:javascript
复制
a.Replace("ABC-1", "ABC-2");

目前的输出如下所示:

代码语言:javascript
复制
ABC-2 ABC-2.1 ABC-2.1~1

取而代之的是,我寻找的输出如下:

代码语言:javascript
复制
ABC-2 ABC-1.1 ABC-1.1~1

有人知道我该怎么做吗?

EN

回答 4

Stack Overflow用户

发布于 2019-02-06 12:39:54

这可能会有所帮助:

代码语言:javascript
复制
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));

结果:

代码语言:javascript
复制
"ABC-2 ABC-1.1 ABC-1.1~1"
票数 5
EN

Stack Overflow用户

发布于 2019-02-06 12:40:29

如果您的输入中没有表示单词结束的标点符号,则链接到的"duplicate“将是一个很好的解决方案。因此,该线程中的正则表达式不能按原样工作。

不过,您应该能够使用negative lookahead

代码语言:javascript
复制
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

它基本上断言搜索词后面的字符不是非空格字符(但如果它是字符串的末尾,也会匹配)。

票数 3
EN

Stack Overflow用户

发布于 2019-02-07 01:09:53

如果只想替换第一次出现的情况,此方法可以帮助您:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54546581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档