使用正则表达式在数据表中搜索“精确单词匹配”
本文关键字:单词匹 搜索 正则表达式 数据表 | 更新日期: 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建议的正则表达式。此模式断言单词前后有一个"单词中断"-不包括任何内容。)
Select
和Where
不可互换-您的选择将为每条记录返回一个true
或false
值,这就是为什么您的计数为4(因为您有4条记录,因此返回4个值。
返回0的where子句告诉我您的RegEx与值0-2不匹配。我会核实RegEx是否按预期工作。