C# 基于文本从字符串中删除一些单词
我想从字符串中删除一个名称。我读了很多关于它的文章。他们建议维护一个数组列表,以将所有名称作为项进行维护。是否有任何方法可以在不维护数组的情况下删除名称。 我有一根绳子C# 基于文本从字符串中删除一些单词,c#,string,C#,String,我想从字符串中删除一个名称。我读了很多关于它的文章。他们建议维护一个数组列表,以将所有名称作为项进行维护。是否有任何方法可以在不维护数组的情况下删除名称。 我有一根绳子 string stVal="Naresh Jadapalli\r\nChandra shekhar ponnam\r\nBalu midhun gonu guntla"; 现在,我想从字符串中删除名称\r\nbalu midhun gonu guntla。 谢谢。假设“balu midhun gonu guntla”是一个打字
string stVal="Naresh Jadapalli\r\nChandra shekhar ponnam\r\nBalu midhun gonu guntla";
现在,我想从字符串中删除名称\r\nbalu midhun gonu guntla
。
谢谢。假设“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);
假设“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);
要正确执行此操作,必须考虑分隔符 如果不这样做,那么如果要替换的名称作为列表中另一个名称的子字符串出现,则会出现错误 例如,想象一下,如果要替换此字符串中的“Matthew”:
"Matthew Smith\r\nMatthew\r\nMatthew Watson"
假定你只想在中间替换“\r\nMatth\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);
}
要正确执行此操作,必须考虑分隔符 如果不这样做,那么如果要替换的名称作为列表中另一个名称的子字符串出现,则会出现错误 例如,想象一下,如果要替换此字符串中的“Matthew”:
"Matthew Smith\r\nMatthew\r\nMatthew Watson"
假定你只想在中间替换“\r\nMatth\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);
}
您也可以尝试以下模式:
(?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, "");
您也可以尝试以下模式:
(?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, "");
简单的解决方法是使用正则表达式找到所需的发生,并用所需的单词替换它们
您可以在中找到好的示例,使用regex找到所需的事件并用所需的单词替换它们的简单解决方案
您可以在找到好的示例,关于
stVal=stVal.Replace(“\n\rBalu midhun gonu guntla”,”)
?@unlimit:漠不关心。这只是解决同样任务的另一种方法,目前还不清楚。我的意思是,OP是要删除单个事件还是所有事件?如果输入字符串没有搜索字符串,此解决方案将崩溃。:)唐也一样;别忘了检查搜索字符串的存在性。@Neverhopels:这里曾经是获取生产代码的地方吗,嗯?同意,但如果提到了,OP会处理它,如果丢失了。替换(“\n\rBalu midhun gonu guntla”,”)?@unlimit:无所谓。这只是解决同样任务的另一种方法,目前还不清楚。我的意思是,OP是要删除单个事件还是所有事件?如果输入字符串没有搜索字符串,此解决方案将崩溃。:)唐也一样;不要忘了检查搜索字符串是否存在。@NeverHopeless:这里曾经是获取生产代码的地方吗,嗯?同意,但如果提到了,OP会处理它,如果丢失了。非常感谢stVal=stVal.Replace(“\n\r\n\r”,“\n\r”)@NareshJadapalli是的,天真的方法肯定存在一些问题。我将在几分钟内更新我的帖子。非常感谢您使用stVal=stVal.Replace(“\n\r\n\r”,“\n\r”)@NareshJadapalli是的,天真的方法肯定存在一些问题。我将在几分钟后更新我的帖子。现在您在\r\n
中遇到问题。请仔细检查它是\r\n
还是\n\r
.sry。。这是\r\n。。我现在编辑了。。当我使用stVal=stVal.Replace(“\r\n\r\n”,“\r\n”);。。工作顺利。但是第一个和最后一个\r\n没有替换..好的,请尝试我编辑的答案。我在前面的评论中提到了这一点。现在您在\r\n
中遇到了问题。请仔细检查它是\r\n
还是\n\r
.sry。。这是\r\n。。我现在编辑了。。当我使用stVal=stVal.Replace(“\r\n\r\n”,“\r\n”);。。工作顺利。但是第一个和最后一个\r\n没有替换..好的,请尝试我编辑的答案。我在前面的评论中已经提到了这一点。按照stVal=stVal.Replace(“\r\nBalu midhun gonu guntla”,”);第一个名称将没有\r\n。所以它不会替换第一个名称。您的第二个正则表达式正在删除第一个\r\n。。无法删除最后一个\r\n是否可以提供示例?例如:实际字符串为naresh jadapalli\r\n Alu midhun。如果删除第二个名称,则输出将为。。balu midhun\r\nas per stVal=stVal.Replace(“\r\n balu midhun gonu guntla”和“”);第一个名称将没有\r\n。所以它不会替换第一个名称。您的第二个正则表达式正在删除第一个\r\n。。无法删除最后一个\r\n是否可以提供示例?例如:实际字符串为naresh jadapalli\r\n Alu midhun。如果删除第二个名称,则输出将为。。巴鲁-米洪\r\n