如何从字符串中删除字符的确切出现?

例如,我有一个字符串,如:

string str = "santhosh,phani,ravi,phani123,praveen,sathish,prakash"; 

我想从str删除,phani

现在,我正在使用str = str.Replace(",phani", string.Empty);

然后我的输出是: str="santhosh,ravi123,praveen,sathish,prakash";

但我想要一个输出: str="santhosh,ravi,phani123,praveen,sathish,prakash";

 string str = "santhosh,phani,ravi,phani123,praveen,sathish,prakash"; var words = str.Split(','); str = String.Join(",", words.Where(word => word != "phani")); 

更好的选择是使用Split和Join方法。 Linq很容易:

 String str = "santhosh,phani,ravi,phani123,praveen,sathish,prakash"; String token = "phani"; String result = String.Join(",", str.Split(',').Where(s => s != token)); 

(编辑:我需要时间进行测试,我不是第一次^^)

 String.join(",", str.split(',').ToList().remove("phani")); 

从列表中删除任何给定的名称。

怎么样

 str = str.Replace(",phani,", ","); 

但是,如果“phani”是字符串中的最后一项,则此操作不起作用。 要解决这个问题,你可以这样做:

 string source = "..."; source += ","; // Explicitly add a comma to the end source = source.Replace(",phani,", ",").TrimEnd(','); 

这会添加一个逗号,替换“phani”并删除尾随的逗号。

第三种解决方案是这样的:

 str = String.Join(",", str.Split(',').ToList().Remove("phani").ToArray()); 

尝试使用逗号代替;

 string str = "santhosh,ravi,phani,phani123,praveen,sathish,prakash"; str = str.Replace(",phani,", ","); Console.WriteLine(str); 

输出将是;

 santhosh,ravi,phani123,praveen,sathish,prakash 

这是一个DEMO

正如Davin在评论中提到的,如果phani是字符串中的最后一项,这将不起作用。 Silvermind的答案看起来像是正确的答案。

 string str = "santhosh,phani,ravi,phani123,praveen,sathish,prakash"; string pattern = @"\b,phani,\b"; string replace = ","; Console.WriteLine(Regex.Replace(str, pattern, replace)); 

输出:

 santhosh,ravi,phani123,praveen,sathish,prakash 

您可以使用正则表达式 ,但是当字符串以子字符串开头或结尾时,您必须处理以下情况:

 var pattern = @",?\bphani\b,?"; var regex = new Regex(pattern); var result = regex.Replace(input, ",").Trim(','); 

较短的符号可能如下所示:

 var result = Regex.Replace(input, @",?\bphani\b,?", ",").Trim(','); 

正则表达式的解释: ,?\bphani\b,? 匹配单词phani ,但只有在前面和后面跟着单词分隔字符(因为单词边界元字符\b ),并且它可以(但不一定)前面和后面跟逗号,谢谢,? 这意味着没有或多个逗号。

最后我们需要从字符串的开头和结尾删除可能的逗号,这就是结果上有Trim(',')的原因。