如何替换字符串中特定出现的字符串
本文关键字:字符串 替换 何替换 | 更新日期: 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);