C#正则表达式删除少于3个字母的单词?

问题描述

| 正则表达式上的任何想法都需要删除不超过3个字母的单词?因此它会发现“ ii是bbb cat rat hat”等,而不是“四,三,二”。     

解决方法

        我将在这里四处走走,向您抛出非正则表达式的解决方案:
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解决方案的性能成本可能会超过其净收益,而正则表达式会产生相同的成本(可能维护起来会更复杂)。     ,        匹配长度为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,\" \");
(否则它将在字符串的开头/结尾处留一个空格。)     ,        不必为此使用正则表达式,只需使用简单的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());
    ,        
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();
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...