我如何替换字符串中的单词,除了第一次出现使用c#

本文关键字:第一次 单词 何替换 替换 字符串 | 更新日期: 2023-09-27 18:16:20

如何使用c#替换字符串中除了第一次出现的单词

例如

string s= "hello my name is hello my name hello";

x代替hello

output should be string news = "hello my name is x my name x";

I tried like works fine

string originalStr = "hello my hello ditch hello";
        string temp = "hello";
        string str = originalStr.Substring(0, originalStr.IndexOf(temp) + temp.Length);
        originalStr = str + originalStr.Substring(str.Length).Replace(temp, "x");

上面的代码可以有正则表达式吗?

我如何替换字符串中的单词,除了第一次出现使用c#

对于一般的模式:

var matchPattern = Regex.Escape("llo");
var replacePattern = string.Format("(?<={0}.*){0}", matchPattern);
var regex = new Regex(replacePattern);
var newText = regex.Replace("hello llo llo", "x");

如果您只想匹配和替换整个单词,请相应地编辑您的模式:

var matchPattern = @"'b" + Regex.Escape("hello") + @"'b";

试试这个:

string pat = "hello";
string tgt = "x";
string tmp = s.Substring(s.IndexOf(pat)+pat.Length);
s = s.Replace(tmp, tmp.Replace(pat,tgt));

tmp是原始字符串的子字符串,从要替换的模式(pat)的第一次出现结束后开始。然后将pat替换为该子字符串中的期望值(tgt),并将原始字符串中的子字符串替换为更新后的值。

演示

你需要正则表达式吗?你可以使用这个小小的LINQ查询和String.Join:

int wordCount = 0;
var newWords = s.Split()
    .Select(word => word != "hello" || ++wordCount == 1 ? word : "x");
string newText = string.Join(" ", newWords);

但是注意,这将用空格替换所有空白(甚至制表符或换行符)。