如何高效查找文本中包含"srv"的所有单词?
解决方法
你的代码没出结果的原因很直接:你在遍历字符串的单个字符,单个字符不可能包含"srv"这个三字符的字符串,自然找不到匹配项。
要实现需求,得先把文本拆分成独立单词,再筛选包含"srv"(不区分大小写)的单词,以下是两种高效的实现方式:
方式一:正则匹配(推荐,适配复杂单词格式)
正则能更准确地识别带特殊符号(比如连字符)的单词,适合大多数场景:
using System.Text.RegularExpressions; string text = "Hello, this is test TEST-SRVCole"; // 匹配包含连字符的单词,比如TEST-SRVCole var words = Regex.Matches(text, @"\w+([-]\w+)*") .Cast<Match>() .Select(match => match.Value); // 不区分大小写筛选包含"srv"的单词 var targetWords = words.Where(word => word.IndexOf("srv", StringComparison.OrdinalIgnoreCase) >= 0) .ToArray(); foreach (var word in targetWords) { Console.WriteLine(word); }
说明:
\w+([-]\w+)*是正则表达式,用来匹配由字母数字组成、中间可带连字符的单词IndexOf搭配StringComparison.OrdinalIgnoreCase比ToLower().Contains更高效,不需要额外生成小写字符串
方式二:按空格拆分(适合简单文本)
如果你的文本只有空格分隔单词,且标点不多,可以用拆分+去标点的方式:
string text = "Hello, this is test TEST-SRVCole"; // 按空格拆分,去掉空项,再清理单词首尾的标点 var words = text.Split(' ', StringSplitOptions.RemoveEmptyEntries) .Select(word => word.Trim(new[] { ',', '.', '!', '?' })); // 筛选目标单词 var targetWords = words.Where(word => word.IndexOf("srv", StringComparison.OrdinalIgnoreCase) >= 0) .ToArray(); foreach (var word in targetWords) { Console.WriteLine(word); }
内容的提问来源于stack exchange,提问作者Petr Barabáš
相关产品推荐
相关产品推荐

