如何替换字符串中特定出现的字符串

本文关键字:字符串 替换 何替换 | 更新日期: 2023-09-27 18:19:56

我有一个字符串,其中可能包含两次"title1"。

例如

服务器/api/shows?title1=费城总是阳光明媚&title1=坏了。。。

我需要将单词"title1"的第二个实例更改为"title2"

我已经知道如何识别字符串中是否有两个字符串实例。

int occCount = Regex.Matches(callingURL, "title1=").Count;
if (occCount > 1)
{
     //here's where I need to replace the second "title1" to "title2"
}

我知道我们可能可以在这里使用Regex,但我无法在第二个实例中得到替换。有人能帮我一把吗?

如何替换字符串中特定出现的字符串

这只会替换第一个实例之后的title1的第二个实例(以及任何后续实例):

string output = Regex.Replace(input, @"(?<=title1.*)title1", "title2");

但是,如果有两个以上的实例,则可能不是您想要的。这有点粗糙,但你可以这样做来处理任何数量的事件:

int i = 1;
string output = Regex.Replace(input, @"title1", m => "title" + i++);

您可以使用正则表达式替换MatchEvaluator并给它一个"状态":

string callingURL = @"server/api/shows?title1=its always sunny in philadelphia&title1=breaking bad";
int found = -1;
string callingUrl2 = Regex.Replace(callingURL, "title1=", x =>
{
    found++;
    return found == 1 ? "title2=" : x.Value;
});

替换可以是通过使用后置++运算符(非常不可读)进行的。

string callingUrl2 = Regex.Replace(callingURL, "title1=", x => found++ == 1 ? "title2=" : x.Value);

您可以指定一个计数和一个索引来开始在中搜索

string str = @"server/api/shows?title1=its always sunny in philadelphia&title1=breaking bad ...";
Regex regex = new Regex(@"title1");
str = regex.Replace(str, "title2", 1, str.IndexOf("title1") + 6);

您也许可以使用负面前瞻:

title1(?!.*title1)

并替换为title2

看看它在这里是如何工作的。

我立即在谷歌搜索中找到了这个链接。

C#-index字符串的第n次出现?

获取字符串第一次出现的IndexOf。

使用返回的IndexOf的startIndex+1作为第二个IndexOf的起始位置。

在"1"字符的适当索引处将其子字符串转换为两个字符串。

将其与"2"字符重新组合在一起。

p.S.W.G的表现真的很棒。但下面我提到了一种简单的方法,可以为那些在lambda和regex表达式中有问题的人完成。)

int index=输入。LastIndexOf("title1=");

字符串output4=输入。子字符串(0,索引-1)+"&title 2"+输入。子字符串(index+"title 1".Length,input.Length-index-"title1".Llength);