我想删除输入标签中的所有噪音标签(字符串) 标签用逗号分隔。如果噪音词是大标签的一部分,它将保留。
这就是我的工作,但没有工作:
string input_string = "This,sure,about,all of our, all, values";
string stopWords = "this|is|about|after|all|also";
stopWords = string.Format(@"\s?\b(?:{0})\b\s?", stopWords);
string tags = Regex.Replace(input_string, stopWords, "", RegexOptions.IgnoreCase);
这是我想从上面输入的内容: “,当然,我们所有的,价值观”
这些词语“This”,“about”,“all”将被替换为“”,因为它们是噪音词。 但即使它中有“全部”的噪音词,“我们所有人”仍将保留。 这是因为逗号是标签边界
任何人都可以帮助我吗?
我有一个替代解决方案,将噪音词放入字典,然后搜索输入字符串中的每个单词。但我更喜欢RegEx方法。
答案 0 :(得分:1)
var input = "This,sure,about,all of our, all, values";
var stopWords = new Regex("^(this|is|about|after|all|also)$");
var result = String.Join(",", input.Split(',').
Where(x => !stopWords.IsMatch(x.Trim())));
答案 1 :(得分:0)
尝试
stopWords = string.Format(@"(?<=^|,)\s*(?:{0})\s*(?=$|,)", stopWords);
这使用lookbehind (?<=)
来确定字符串的前一个或开头,以及前瞻(?=)
以确定尾随,。我还删除了边界\b
代码,因为它不需要,并用\s?
替换您的可选空格\s*
以匹配0个或更多空格。
您可以将*更改为?如果你真的意味着最多只有一个空间。
答案 2 :(得分:0)
我不喜欢使用Regex处理任务,因此我将提供替代解决方案,您可以决定是否要使用它。
string[] inputWords = input_string.Split(',');
string tags = "";
foreach(string s in inputWords)
{
if(!storWords.Contains(s.ToLowerInvariant()))
tags += s + ",";
}
tags = tags.TrimEnd(',');
//tags = "sure,all of our,values"