如果我的文本包含任何数组内容而不是“发短信”的话,我如何检查我的文字?
string text = "some text here";
string[] array1 = { "text", "here" };
string[] array2 = { "some", "other" };
我在SO上找到了这个代码,我该如何适应它?
string regexPattern = string.Format(@"\b{0}\b", Regex.Escape(yourWord));
if (Regex.IsMatch(yourString, regexPattern)) {
// word found
}
正则表达式是这项工作的最佳方法吗?或者我应该使用foreach
循环?
答案 0 :(得分:8)
正则表达式是这项工作的最佳方法吗?
我避免使用正则表达式,直到没有其他干净,高效和可读的方法,但这是我认为的品味问题。
数组中的任何单词是否都是字符串的单词?你可以使用Linq:
string[] words = text.Split();
bool arraysContains = array1.Concat(array2).Any(w => words.Contains(w));
答案 1 :(得分:1)
如果您要检查text
是否包含array1
数组中的任何字符串,您可以尝试这样做:
text.Split(' ').Intersect(array1).Any()
答案 2 :(得分: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);
答案 3 :(得分:0)
如果你的单词可能与引号,逗号等相邻而不仅仅是空格,那么你可以比使用Split()
更聪明位:
var words = Regex.Split(text, @"\W+");
bool anyFound = words
.Intersect(array1.Union(array2), StringComparer.CurrentCultureIgnoreCase)
.Any();