Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何计算字符串中的噪声字数?_C#_Regex_Linq - Fatal编程技术网

C# 如何计算字符串中的噪声字数?

C# 如何计算字符串中的噪声字数?,c#,regex,linq,C#,Regex,Linq,假设我有一个噪音词列表 string[] noise = new[] {"and", "it", "in"}; // etc, etc …我有一个字符串s。我想知道s中存在多少噪声词 我知道可以通过在空格上拆分s,然后在结果数组中循环检查noise中的匹配项来实现这一点,但这似乎是一种非常低效的方法。感觉应该有一个整洁的正则表达式或Linq方法来实现这一点 有什么建议吗?LINQ并不比循环更有效,但通常更具可读性和简洁性,我想这正是您想要的。在这种情况下,您可以使用可枚举.计数和包含: int

假设我有一个噪音词列表

string[] noise = new[] {"and", "it", "in"}; // etc, etc
…我有一个字符串
s
。我想知道
s
中存在多少噪声词


我知道可以通过在空格上拆分
s
,然后在结果数组中循环检查
noise
中的匹配项来实现这一点,但这似乎是一种非常低效的方法。感觉应该有一个整洁的正则表达式或Linq方法来实现这一点


有什么建议吗?

LINQ并不比循环更有效,但通常更具可读性和简洁性,我想这正是您想要的。在这种情况下,您可以使用
可枚举.计数
包含

int countNoiseWords = s.Split().Count(noise.Contains);
不区分大小写的方式:

int countNoiseWords = s.Split()
    .Count(w => noise.Contains(w, StringComparer.InvariantCultureIgnoreCase));

如果<代码>噪声-LIST非常长,您应该考虑使用<代码> HasStuts<代码>而不是列表。 这些单词总是用字符串分隔吗?标点符号呢?还有什么让你认为Linq或RegEx会更好?它必须是一个列表吗?如果单词是常量(即不是用户输入),您可以编写一个正则表达式,如

\b(?:and | it | in)\b
,并计算matches@DavidG是的,单词之间用空格隔开,没有任何标点符号(这是一个不寻常的情况,但不值得解释,因为它并没有真正影响问题),我并没有说Linq或RegEx一定会更好,我在寻找一种更优雅和/或更高效的编码方式,并建议将它们作为明显的候选者。Tim的答案正是我所需要的。“我知道可以通过在空格上拆分s,然后在结果数组中循环检查噪声中的匹配项来实现这一点”。@Evk:是的,但他想要一种LINQ方法,因为它更简洁。顺便提一下,值得使用哈希集,谁知道噪声列表有多长。@Evk在我的例子中,噪声列表非常短,因此不需要HashSet。我不是专门寻找Linq或RegEx,我只是想看看是否有一种更优雅和/或高效的编码方式。这很好用。@avrohmyisroel注意,如果有任何标点符号,这将给出错误的否定。例如“Test.It burns”-“It”将不被计算在内。