0

我想从字符串中删除一个名称。我读过很多关于它的文章。他们建议维护一个数组列表以将所有名称维护为项目。有没有办法在不维护数组的情况下删除名称。我有一个字符串

string stVal="Naresh Jadapalli\r\nChandra shekhar ponnam\r\nBalu midhun gonu guntla";

现在我想\r\nbalu midhun gonu guntla从字符串中删除名称。谢谢..

4

4 回答 4

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);
于 2013-06-06T06:17:40.857 回答
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-------------");
于 2013-06-06T06:22:18.927 回答
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, "");
于 2013-06-06T06:23:06.163 回答
0

使用正则表达式的简单解决方案找到所需的出现并将它们替换为所需的单词

您可以在C# RegEx Match中找到好的示例

于 2013-06-06T08:10:55.407 回答