2

根据此链接使用 SQL Server LIKE 模式搜索“全词匹配”

我想遵循相同的查询字符串,但在数据表中我编写了以下语句

假设数据表包含以下记录

datatable[0]["src"]="tst";
datatable[1]["src"]="tst,";
datatable[2]["src"]="tst:";
datatable[3]["src"]="disney";

int p=datatable.AsEnumerable().Select(a => Regex.IsMatch(a["src"].ToString(), "[^a-z]windows[^a-z]")).Count();

但结果是 p = 4 而这个词 'windows' 只存在 3 次

如果使用“where”而不是“select”,如下所示

int p=datatable.AsEnumerable().Where(a => Regex.IsMatch(a["src"].ToString(), "[^a-z]windows[^a-z]")).Count();

p 始终为 0

我的陈述有什么问题..有什么建议吗?!

4

2 回答 2

2

您的第一个示例 ( Select) 对数据表中的所有行运行该操作。结果将是一个布尔值列表,指示行值是否与表达式匹配。

在这两种情况下,您的模式都需要在单词“windows”之前和之后使用非字母,这导致它不匹配。在第一种情况下,您将获得一个包含 4 个“假”值的列表,而在第二种情况下,您将一无所获。

我相信获得你想要的最简单的正则表达式可能是这样的:

"\bwindows\b"

(使用 Robert Harvey 建议的正则表达式。这种模式断言在单词之前和之后有一个“单词中断” - 不包括任何内容。)

于 2013-02-14T19:39:35.973 回答
0

Select并且Where不可互换 - 您的选择将为每条记录返回一个truefalse值,这就是您的计数为 4 的原因(因为您有 4 条记录,因此有 4 个返回值。

您返回 0 的 where 子句告诉我您的 RegEx 不匹配值 0-2。我将验证 RegEx 是否按预期工作。

于 2013-02-14T19:40:11.943 回答