c#在字符串中查找关键字并将其删除

时间:2019-10-08 19:56:02

标签: c# string

我有一个带有关键字的列表。我编写了一个方法,如果字符串包含列表中的关键字,则该方法必须从字符串中删除关键字。方法如下:

private string RemoveFromList(string sentence)
{
    var lists = new List<string>{ "ask-", "que-", "(app)", "(exe)", "(foo)" };
    var control = lists.Any(sentence.Contains);
    string result;
    if (control)
    {
        var index = sentence.IndexOf(lists.FirstOrDefault(sentence.Contains) 
                 ?? throw new InvalidOperationException(), StringComparison.Ordinal);
        result = index != -1 ? sentence.Remove(index) : sentence;
    }
    else
        result = sentence;
    return result;
}

var str = "ask- This is a sentence.";
Message.Box(RemoveFromList(str));
// It does not give to me: This is a sentence.

此方法无法正常工作。不会从字符串中删除关键字。

3 个答案:

答案 0 :(得分:2)

使用string.Replace是最简单的方法:

foreach (var word in lists)
{
   sentence = sentence.Replace(word,"").Trim();
}

尽管那样也会在字符串的中间找到单词。如果只想在开始时删除它,则可以使用IndexOf来检查它是否为0,然后使用word.LengthSubstring开始使用字符串。或使用StartsWith

foreach (var word in lists)
{
   if (sentence.StartsWith(word))
   {
       sentence = sentence.Substring(word.Length).Trim();
     // break; // if only one
   }
}

答案 1 :(得分:2)

有两种选择。

  1. 首先,“删除”用法不正确。您只想删除关键字。如果您传递1个参数来删除它,它将从该索引中删除直到结束。将关键字的长度作为第二个参数传递给Remove。

    s.Remove(index,len);

  2. 如果字符串包含字符串,则用空字符串替换出现的关键字

    s.Replace(“ keyword”,“”);

答案 2 :(得分:0)

另一种选择是您可以创建扩展,因为您已经知道要删除哪些项目。

using System.Text.RegularExpressions;

public static string RemoveFromList(this string sentence)
{
    new List<string>{ "ask-", 
                     "que-", 
                     "(app)", 
                     "(exe)", 
                     "(foo)" }.ForEach(name => 
                                       {
                                           sentence = Regex.Replace(sentence.Replace(name, string.Empty), " {2,}", " ");
                                       });          
    return sentence;
}

使用情况

 var str = "ask- This is (app) a que- sentence.".RemoveFromList();

注意

我使用了Regex.Replace,因为在删除错误的字符串后,您可能会在空白处留下一些空白,这有助于确保不会发生这种情况。