0

如果我的文本包含任何数组内容而不是“发短信”,我该如何检查它?

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循环?

4

4 回答 4

8

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

在没有其他干净、高效和可读的方法之前,我会避免使用正则表达式,但我认为这是个人喜好问题。

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

string[] words = text.Split();
bool arraysContains = array1.Concat(array2).Any(w => words.Contains(w));
于 2013-04-26T07:08:08.850 回答
1

如果您要检查text数组中是否包含任何字符串,array1可以试试这个:

text.Split(' ').Intersect(array1).Any()
于 2013-04-26T07:01:24.787 回答
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);
于 2013-04-26T07:13:05.673 回答
0

如果您的单词可能与引号、逗号等相邻而不仅仅是空格,那么您可以比仅使用更聪明一点Split()

var words = Regex.Split(text, @"\W+");
bool anyFound = words
    .Intersect(array1.Union(array2), StringComparer.CurrentCultureIgnoreCase)
    .Any();
于 2013-04-26T07:24:47.320 回答