关于正则表达式的任何想法都需要删除3个字母或更少的字母?所以它会发现“它是bbb cat rat hat”等,但不是“四,三,二”。
答案 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();