C# - 从字符串列表中查找和删除子字符串

时间:2013-06-24 11:08:50

标签: c# .net string

我的单词列表不好。如果一个字符串包含坏词列表中的任何项目/项目,我需要从字符串中删除该坏词。

List<string> badWordList = new List<string> { "email:", "index", "mobile:", "fax:", "web" };

我能够搜索字符串但无法删除。请帮帮我...我试过下面的代码:

string myText = "email:abc@gmail.com";
if (badWordList.Any(w => myText.IndexOf(w, StringComparison.OrdinalIgnoreCase) >= 0))
{
    // How to remove
}

以下是预期输出的输入集:

  1. i / p- email:abc@gmail.com

    o / p - abc@gmail.com

  2. i / p- Jack F. Mobile:89788987

    o / p- Jack F. 89788987

  3. i / p- Jack F.电子邮件:t@p.c mobile:65777 WEB

    o / p- Jack F. t@p.c 65777

  4. 我更喜欢非正则表达式方法。谢谢你的帮助。

5 个答案:

答案 0 :(得分:9)

你可以迭代坏词并删除它们:

foreach (string badWord in badWordList) {
    myText = myText.Replace(badWord, string.Empty);
}

但请注意,此方法区分大小写,即它会删除“email:”但不会删除“EMAIL:”。
如果您需要不区分大小写的解决方案,最简单的方法是使用Regex:

string myText = "EMAIL:abc@gmail.com";
Regex badWords = new Regex("email:|index|mobile:|fax:|web", RegexOptions.IgnoreCase | RegexOptions.Compiled);
myText = badWords.Replace(myText, string.Empty);

答案 1 :(得分:4)

您可以使用空字符串替换字符串来删除字符串:

foreach (var badWord in badWordList)
{
    myText = myText.Replace(badWord, "");
}

不幸的是,这是区分大小写的。对于没有正则表达式的不区分大小写的字符串替换,请参阅Is there a case insensitive string replace in .Net without using Regex?

您也可以使用正则表达式执行此操作,在这种情况下,不区分大小写的比较“免费”:

var regex = String.Join("|", badWordList.Select(w => Regex.Escape(w)));
var myText = Regex.replace(myText, regex, "", RegexOptions.IgnoreCase);

答案 2 :(得分:1)

string.Empty替换'坏词'的实例: -

List<string> badWordList = new List<string> { "email", "index:", "mobile:", "fax:", "web" };
string myText = "email:abc@gmail.com";

foreach (string s in badWordList)
{
    myText = myText.Replace(s,string.Empty);
}

答案 3 :(得分:1)

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            using System.Collections;
            namespace WindowMaker
            {
                class Program
                {

                    static void Main(string[] args)
                    {
                        System.Console.WriteLine("Enter Main string...");
                        String str = System.Console.ReadLine();
                        System.Console.WriteLine("Enter sub string...");
                        String sub = System.Console.ReadLine();
                        Boolean flag;
                        int strlen=sub.Length;
                        int inde = str.IndexOf(sub);
                        while (inde != -1)
                        {
                            inde = str.IndexOf(sub);
                            str=str.Replace(sub,"");

                        }
                        System.Console.WriteLine("Remaining string :: {0}",str);

                            Console.Read();
                    }

                }
            }

enter image description here

答案 4 :(得分:0)

如果区分大小写:

List<String> badWordList = new List<String> { "email:", "index", "mobile:", "fax:", "web" };
String myText = "This is a exemple of Email: deleting with index and fax and web";

badWordList.ForEach(bw => myText = myText.Replace(bw, String.Empty));