2013-04-26 166 views
0

如何检查我的文本是否包含任何数组内容作为不是“发短信”的单词?检查一个字符串是否包含任何字符串数组元素

string text = "some text here"; 
string[] array1 = { "text", "here" }; 
string[] array2 = { "some", "other" }; 

我发现这个代码所以我该如何适应它?

string regexPattern = string.Format(@"\b{0}\b", Regex.Escape(yourWord)); 
if (Regex.IsMatch(yourString, regexPattern)) { 
    // word found 
} 

也是正则表达式这个工作的最佳方法?或者我应该使用foreach循环?

+1

你需要在两个数组要搜索的关键字('array1'和'array2')? – Channs 2013-04-26 07:08:54

+0

不,我不想同时搜索至少两个阵列不在同一时间。 – Incognito 2013-04-26 07:24:16

回答

8

也是正则表达式,为这项工作的最佳方法?

直到没有其他干净,高效和可读的方法,我才避免使用正则表达式,但这是我想象中的味道问题。

数组中的任何单词是否是字符串中的单词?您可以使用LINQ:

string[] words = text.Split(); 
bool arraysContains = array1.Concat(array2).Any(w => words.Contains(w)); 
+0

+1我同意不使用正则表达式,直到有必要 – 2013-04-26 07:10:37

+0

是的,我认为Linq可以做到这一点,但我对Linq的知识是最小的..这将做我认为的工作,非常感谢。 – Incognito 2013-04-26 07:17:24

+0

我不想连接2个数组的小更新。所以我只是用这个: bool arraysContains = array1.Any(w => words.Contains(w)); – Incognito 2013-04-26 07:37:49

1

如果你要检查text是否包含任何字符串像array1数组,你可以尝试这样的:

text.Split(' ').Intersect(array1).Any() 
0

试试这个代码:

string text = "some text here"; 

string[] array1 = { "text", "here" }; 
string[] array2 = { "some", "other" }; 

bool array1Contains = array1.Any(text.Contains); 
bool array2Contains = array2.Any(text.Contains); 
+0

此代码不适合我的情况,我需要单词匹配。如果我将文本更改为“some1文本....”,它将是真实的。 – Incognito 2013-04-26 07:31:53

0

如果你的话可能是邻近的报价,逗号等,而不仅仅是空间,你可以是一个不是更聪明只是用Split()

var words = Regex.Split(text, @"\W+"); 
bool anyFound = words 
    .Intersect(array1.Union(array2), StringComparer.CurrentCultureIgnoreCase) 
    .Any(); 
相关问题