如何解决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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。