从基于文本的字符串中删除一些单词

本文关键字:字符串 删除 单词 于文本 文本 | 更新日期: 2023-09-27 18:17:04

我想从字符串中删除一个名称。我读了很多关于它的文章。他们建议维护一个数组列表来维护所有的名字作为项。是否有任何方法可以在不维护数组的情况下删除名称?我有一个字符串

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);

你也可以试试这个模式:

(?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, "");

要正确执行此操作,必须考虑分隔符。

如果您不这样做,那么如果您要替换的名称作为列表中另一个名称的子字符串出现,则会出现错误。

例如,假设您要替换字符串中的"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-------------");

这个问题的简单解决方案是使用正则表达式找到所需的出现并将其替换为所需的单词

你可以在c# RegEx Match中找到很好的例子