使用正则表达式在数据表中搜索“精确单词匹配”

本文关键字:单词匹 搜索 正则表达式 数据表 | 更新日期: 2023-09-27 17:59:07

根据此链接使用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,而"窗口"这个词只存在的3倍

如果使用"where"而不是"select"作为

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

p总是0

我的陈述有什么错。。有什么建议吗?!

使用正则表达式在数据表中搜索“精确单词匹配”

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

在这两种情况下,您的模式都是,在单词"windows"前后需要一个非alpha,这会导致它不匹配。在第一种情况下,您会得到一个包含4个"false"值的列表,而在第二种情况下则一无所获。

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

"'bwindows'b"

(使用Robert Harvey建议的正则表达式。此模式断言单词前后有一个"单词中断"-不包括任何内容。)

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

返回0的where子句告诉我您的RegEx与值0-2不匹配。我会核实RegEx是否按预期工作。