Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 使用.NET中的Contains方法保留空白_C#_.net - Fatal编程技术网

C# 使用.NET中的Contains方法保留空白

C# 使用.NET中的Contains方法保留空白,c#,.net,C#,.net,我试图将项目添加到一个列表中,该列表的“text”值包含字符串数组中的任何指定单词。例如: string[] myArray = { " win ", " win." }; Item 1 | Enter to win something! Item 2 | Windows is better than Mac OS Item 3 | Winning is great Item 4 | I hope that I will win some money 在这些项目中,我只想将项目1和4添加到我

我试图将项目添加到一个列表中,该列表的“text”值包含字符串数组中的任何指定单词。例如:

string[] myArray = { " win ", " win." };

Item 1 | Enter to win something!
Item 2 | Windows is better than Mac OS
Item 3 | Winning is great
Item 4 | I hope that I will win some money
在这些项目中,我只想将项目1和4添加到我的动态列表中

到目前为止,这是我的代码,它确实返回了我想要的项目,但问题是它也返回了一些行,这些行的值也包含了该单词的一部分。例如,“win”一词还返回“window”、“winning”等。。(我从MySQL数据库获取原始数据,因此是DataReader)

我首先想到在字符串数组中的项目周围添加空格(如果单词在句末,也可以添加“.”),但代码中的某些内容似乎去掉了/忽略了空格


是否有使用我当前的方法的解决方案,或者通常有更好的方法来实现这一点?

包含的功能不仅仅是检查源代码中是否包含一段文本。它考虑了当前的文化

我建议使用
IndexOf
(如中建议的那样),它对文本进行文字匹配:

if(myArray.Any(s => reader["text"].ToLower().IndexOf(s) >= 0))

Contains
不仅仅是检查源代码中是否包含一段文本。它考虑了当前的文化

我建议使用
IndexOf
(如中建议的那样),它对文本进行文字匹配:

if(myArray.Any(s => reader["text"].ToLower().IndexOf(s) >= 0))

因此,通过正则表达式对搜索短语进行转义,并将它们与OR交替组合,然后用表达式将其包围,以匹配空格、(某些)标点或行的开头或结尾,您可以构造一个正则表达式,该表达式仅在搜索短语周围有空格或标点符号时匹配

var punctuation = @"/\.,:;'""!";
var escapedPunctuation = Regex.Escape(punctuation);
var myArray = new[]{ "win", "fun" };
var searchPatterns = myArray
                       .Select(Regex.Escape);
var alternatedPatterns = string.Join("|", searchPatterns);
var fullRegexPattern = string.Format(@"((^|\s|[{0}]){1}($|\s|[{0}]))", 
                                     escapedPunctuation, 
                                     alternatedPatterns);
// so regex pattern is:
// ((^|\s|[/\\\.,:;'"!])win|fun($|\s|[/\\\.,:;'"!]))

var itemsToSearch = new[]{"Enter to win something!",
                          "Windows is better than Mac OS",
                          "Winning is great",
                          "I hope that I will win some money",
                          "Windows, win, woo",
                          "this is fun!"};

var matches = itemsToSearch.Where(i => Regex.IsMatch(i, fullRegexPattern));

因此,通过正则表达式对搜索短语进行转义,并将它们与OR交替组合,然后用表达式将其包围,以匹配空格、(某些)标点或行的开头或结尾,您可以构造一个正则表达式,该表达式仅在搜索短语周围有空格或标点符号时匹配

var punctuation = @"/\.,:;'""!";
var escapedPunctuation = Regex.Escape(punctuation);
var myArray = new[]{ "win", "fun" };
var searchPatterns = myArray
                       .Select(Regex.Escape);
var alternatedPatterns = string.Join("|", searchPatterns);
var fullRegexPattern = string.Format(@"((^|\s|[{0}]){1}($|\s|[{0}]))", 
                                     escapedPunctuation, 
                                     alternatedPatterns);
// so regex pattern is:
// ((^|\s|[/\\\.,:;'"!])win|fun($|\s|[/\\\.,:;'"!]))

var itemsToSearch = new[]{"Enter to win something!",
                          "Windows is better than Mac OS",
                          "Winning is great",
                          "I hope that I will win some money",
                          "Windows, win, woo",
                          "this is fun!"};

var matches = itemsToSearch.Where(i => Regex.IsMatch(i, fullRegexPattern));

为什么#2符合您的标准而不符合#4?我建议使用
Regex
,或者使用@patrickhofmancause建议的
IndexOf
方法@FᴀʀʜᴀɴAɴᴀᴍRegex做得很好。至于
IndexOf
,我只是根据你的信息来判断的p
IndexOf
速度快了100倍,因为它不需要编译任何东西。在这种情况下,
IndexOf
就是最好的选择@FᴀʀʜᴀɴAɴᴀᴍ为什么#2符合您的标准而不符合#4?我建议使用
Regex
,或者使用@patrickhofmancause建议的
IndexOf
方法@FᴀʀʜᴀɴAɴᴀᴍRegex做得很好。至于
IndexOf
,我只是根据你的信息来判断的p
IndexOf
速度快了100倍,因为它不需要编译任何东西。在这种情况下,
IndexOf
就是最好的选择@FᴀʀʜᴀɴAɴᴀᴍ从给出的样本数据中,我看不出文化差异如何匹配
获胜
窗口
。事实上,我猜OP的意思是1和4应该匹配。@mmmoutache,根据上面的评论,这个答案如何让您能够区分“赢”、“赢”、“赢”、“窗口”等等?这似乎比你一开始的情况倒退了一步。从给出的示例数据中,我看不出文化差异如何与
获胜
Windows
相匹配。事实上,我猜OP的意思是1和4应该匹配。@mmmoutache,根据上面的评论,这个答案如何让你能够区分“赢”、“赢”、“赢”、“窗口”等等?这似乎比你最初拥有的东西倒退了一步。