从字符串中删除单词或字符后跟空格或在c#中的空格之前

时间:2018-05-07 06:44:58

标签: c#

我有一个字符串

string name = "AL QADEER UR AL REHMAN AL KHALIL UN";

如何删除所有字符ALURUN或者可能更像这样的字符。

我的字符串应如下所示;

QADEER REHMAN KHALIL

目前我正在尝试这样做;

List<string> list = new List<string> { "AL", "UR", "UN" };

foreach (var item in list )

{
    systemName = systemName.Replace(item, "");
}

这也是从AL删除KHALIL,如何将此限制为不删除包含该字符的字词。

更新: 在List中为单词添加空格时,只会删除单词前后空格的单词。并将UR连接到后续单词。 我正在加载要从数据库中删除的单词列表;

6 个答案:

答案 0 :(得分:3)

static void TestRegex()
{
    string name = "AL QADEER UR AL REHMAN AL KHALIL UN";
    // Add other strings you want to remove
    string pattern = @"\b(AL|UR|UN)\b";
    name = Regex.Replace(name, pattern, String.Empty);
    // Remove extra spaces
    name = Regex.Replace(name, @"\s{2,}", " ").Trim();
    Console.WriteLine(name);
}

<强>更新

您可以这样生成模式:

// Generate pattern
var list = new List<string> { "AL", "UR", "UN" };
string pattern = @"\b(" + String.Join("|", list) + @")\b";

答案 1 :(得分:3)

请试试这个:

var name = "AL QADEER UR AL REHMAN AL KHALIL UN";
var list = new List<string> { "AL", "UR", "UN" };
name = string.Join(" ", name.Split(' ').ToList().Except(list));

答案 2 :(得分:1)

var words = new[] { "AL", "UR", "UN" };
var arr = systemName.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).Except(words);
systemName = string.Join(" ", arr);

答案 3 :(得分:1)

无需使用正则表达式。定义了带有“禁止”单词的列表,就足以迭代句子中的wprds进行过滤,如果单词在禁止单词列表中,则将其排除,否则,将单词包含在最终字符串中。

试试这个:

string name = "AL QADEER UR AL REHMAN AL KHALIL UN";
string systemName = "";
List<string> list = new List<string> { "AL", "UR", "UN" };

foreach (var item in name.Split(new char[] { ' ', ',', '.' }, StringSplitOptions.RemoveEmptyEntries))
    systemName += list.Contains(item) ? "" : item + " ";

答案 4 :(得分:1)

我正在从数据库加载该列表,并且可以随时更改,如何在发生更改时在正则表达式中使用它

那么,长度总是2?

不,但不能大于4

public static void Main()
{
    var input = "AL QADEER UR AL REHMAN AL KHALIL UN AAA BBB";
    Regex re = new Regex(@"\b\w{1,4}\b");
    var result = re.Replace(input, "");
    Console.WriteLine(result);
}

输出:

QADEER REHMAN KHALIL

dotNetFiddle

答案 5 :(得分:1)

LINQEXCEPT

的帮助下回答
string name = "AL QADEER UR AL REHMAN AL KHALIL UN";
var list = new string[] { "AL", "UR", "UN" };

name = name
   .Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)
   .Except(list)
   .Aggregate((prev, next) => $"{prev} {next}");

输出: QADEER REHMAN KHALIL