如何检测字符串包含指定单词、忽略特殊字符且保留原句内容
实现方案
核心逻辑:仅在匹配判断环节对原句做临时特殊字符过滤,匹配成功后直接返回未修改的原句即可。
步骤1:实现特殊字符清理的辅助方法
你可以根据需求自定义要忽略的字符,示例中我们过滤逗号、货币符号、句号等非数字/字母字符:
// 移除字符串中所有非数字、字母的字符,可根据需求调整规则 private static string RemoveSpecialChars(string input) { // 正则保留0-9、a-z、A-Z,你也可以按需调整要保留/移除的字符 return System.Text.RegularExpressions.Regex.Replace(input, @"[^0-9a-zA-Z]", "").ToLower(); }
如果需要更灵活的规则,比如仅移除指定字符,也可以直接做针对性替换:
private static string RemoveSpecialChars(string input) { return input.Replace(",", "").Replace("$", "").Replace(".", "").ToLower(); }
步骤2:修改匹配逻辑
匹配时仅把临时清理后的句子和词库做判断,匹配成功直接返回原句:
List<string> res = row.ItemArray .OfType<string>() // 先筛选字符串类型,减少后续处理量 .Where(sentence => wrdList.Any(wrd => RemoveSpecialChars(sentence).Contains(wrd.ToLower()))) // 仅判断环节做清理,不修改原句 .ToList();
提示:如果词库中的词汇也可能包含特殊字符,可以将判断逻辑调整为
RemoveSpecialChars(sentence).Contains(RemoveSpecialChars(wrd)),适配更多场景。
效果验证
针对你的示例场景:
- 原句:
"Tesla car price is $ 250,000."清理后得到teslacarpriceis250000 - 词库中的
"250000"可以成功匹配 - 最终返回结果为未修改的原句
"Tesla car price is $ 250,000.",完全符合要求。
内容的提问来源于stack exchange,提问作者Tech Learner
相关产品推荐
相关产品推荐

