检查一个字符串是否包含任何字符串数组元素
问题描述:
如何检查我的文本是否包含任何数组内容作为不是“发短信”的单词?检查一个字符串是否包含任何字符串数组元素
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
循环?
答
也是正则表达式,为这项工作的最佳方法?
直到没有其他干净,高效和可读的方法,我才避免使用正则表达式,但这是我想象中的味道问题。
数组中的任何单词是否是字符串中的单词?您可以使用LINQ:
string[] words = text.Split();
bool arraysContains = array1.Concat(array2).Any(w => words.Contains(w));
答
如果你要检查text
是否包含任何字符串像array1
数组,你可以尝试这样的:
text.Split(' ').Intersect(array1).Any()
答
试试这个代码:
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
答
如果你的话可能是邻近的报价,逗号等,而不仅仅是空间,你可以是一个位不是更聪明只是用Split()
:
var words = Regex.Split(text, @"\W+");
bool anyFound = words
.Intersect(array1.Union(array2), StringComparer.CurrentCultureIgnoreCase)
.Any();
你需要在两个数组要搜索的关键字('array1'和'array2')? – Channs 2013-04-26 07:08:54
不,我不想同时搜索至少两个阵列不在同一时间。 – Incognito 2013-04-26 07:24:16