c#Regex删除少于3个字母的单词?

时间:2011-06-14 13:32:06

标签: c# regex

关于正则表达式的任何想法都需要删除3个字母或更少的字母?所以它会发现“它是bbb cat rat hat”等,但不是“四,三,二”。

4 个答案:

答案 0 :(得分:8)

匹配长度为1到3的单词的正则表达式为\b\w{1,3}\b,用空字符串替换这些匹配项。

Regex re = new Regex(@"\b\w{1,3}\b");
var result = re.Replace(input, "");

要删除可以使用的双重空格:

Regex re = new Regex(@"\s*\b\w{1,3}\b\s*");
var result = re.Replace(input, " ");

(尽管它会在字符串的开头/结尾留一个空格。)

答案 1 :(得分:6)

不一定需要正则表达式,可以通过简单的linq选择来完成。

string[] words = inputString.Split(' ');

var longWords = words.Where(x => x.Length > 3);

string outputString = String.Join(" ", longWords.ToArray());

你可以在一行代码中做到这一点:

outputString = String.Join(" ", inputString.Split(' ').Where(x => x.Length > 3).ToArray());

答案 2 :(得分:0)

我会在这里走出困境,向你抛出一个非正则表达式的解决方案:

public static string StripWordsWithLessThanXLetters(string input, int x)
{
    var inputElements = input.Split(' ');
    var resultBuilder = new StringBuilder();
    foreach (var element in inputElements)
    {
        if (element.Length >= x)
        {
            resultBuilder.Append(element + " ");
        }
    }
    return resultBuilder.ToString().Trim();
}

这比其他解决方案更冗长,但我认为使用Linq解决方案的性能成本可能超过其净收益,而正则表达式会产生相同的成本(可能会使维护更加复杂。)

答案 3 :(得分:0)

string qText = "Long or not long sample text";
var inputWords = qText.Split(' ').ToList();
var rem = (from c in inputWords
           where c.Length > 3
           select c).ToList();