Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于文本从字符串中删除一些单词_C#_String - Fatal编程技术网

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