我想从字符串中删除名称。我读了很多关于它的文章。他们建议维护一个数组列表,将所有名称保存为项目。有没有办法在不维护数组的情况下删除名称。 我有一个字符串
string stVal="Naresh Jadapalli\r\nChandra shekhar ponnam\r\nBalu midhun gonu guntla";
现在我想从字符串中删除名称\r\nbalu midhun gonu guntla
。
谢谢..
答案 0 :(得分:4)
假设"balu midhun gonu guntla"
是一个错字,它应该是:
var strToRemove = "Balu midhun gonu guntla";
然后代码如下:
stVal.Remove(stVal.IndexOf(strToRemove), strToRemove.Length);
如果不是拼写错误,那么只需使用另一个IndexOf
重载:
stVal.Remove(stVal.IndexOf(strToRemove, StringComparison.CurrentCultureIgnoreCase), strToRemove.Length);
答案 1 :(得分:1)
要正确执行此操作,您必须考虑分隔符。
如果不这样做,那么如果要替换的名称作为列表中另一个名称的子字符串出现,则会出现错误。
例如,想象一下如果你在这个字符串中替换“Matthew”:
"Matthew Smith\r\nMatthew\r\nMatthew Watson"
据推测,你只想替换中间的“\ r \ nMatthew \ r \ n”来给出:
"Matthew Smith\r\nMatthew Watson"
但如果你忽略了分隔符,你会得到这个:
" Smith\r\nMatthew\r\nMatthew Watson"
以下方法将删除第一个匹配,正确计算分隔符。请注意,它还必须处理字符串开头和结尾的特殊情况,因为在开头或结尾没有分隔符。
/// <summary>This removes the first occurrence of the specified target string in the given text.</summary>
/// <param name="text">The text from which to remove the target string.</param>
/// <param name="target">The target string to remove.</param>
/// <param name="delimiter">The delimiter string used between potential target strings.</param>
/// <returns>The text with first occurrence (if any) of the target string removed.</returns>
public static string RemoveFirstMatch(string text, string target, string delimiter)
{
if (text == null)
throw new ArgumentNullException("text");
if (target == null)
throw new ArgumentNullException("target");
if (text.StartsWith(target + delimiter))
return text.Substring(target.Length + delimiter.Length);
if (text.EndsWith(delimiter + target))
return text.Substring(0, text.Length - target.Length - delimiter.Length);
return text.Replace(delimiter + target + delimiter, delimiter);
}
示例测试代码:
string stVal="aaaa\r\naaab\r\naaab\r\naaac";
string delimiter = "\r\n";
Console.WriteLine(RemoveFirstMatch(stVal, "aaaa", delimiter) + "\n-------------");
Console.WriteLine(RemoveFirstMatch(stVal, "aaab", delimiter) + "\n-------------");
Console.WriteLine(RemoveFirstMatch(stVal, "aaac", delimiter) + "\n-------------");
答案 2 :(得分:1)
你也可以尝试这种模式:
(?i)Balu midhun gonu guntla(\r\n)*|(\r\n)+Balu midhun gonu guntla(\r\n)*$
参见示例:
string pattern = "(?i)Balu midhun gonu guntla(\r\n)*|(\r\n)+Balu midhun gonu guntla(\r\n)*$";
string stVal = "Balu midhun gonu guntla\r\n\r\nNaresh Jadapalli\r\nNaresh Jadapalli";
string res1 = Regex.Replace(stVal, pattern, "");
stVal = "Naresh Jadapalli\r\n\r\nBalu midhun gonu guntla\r\n\r\nChandra shekhar ponnam\r\n\r\nBalu midhun gonu guntla\r\n\r\n";
string res2 = Regex.Replace(stVal, pattern, "");
stVal = "Naresh Jadapalli\r\n\r\nChandra shekhar ponnam\r\nChandra shekhar ponnam\r\n\r\nBalu midhun gonu guntla\r\n\r\n";
string res3 = Regex.Replace(stVal, pattern, "");
答案 3 :(得分:0)
使用正则表达式的简单解决方案找到所需的事件并用所需的单词替换它们
您可以在C# RegEx Match
找到好的样本