在字符串中查找精确的单词

3

如何确定一个字符串是否包含我要查找的确切单词?

例如:“this is my text”;要查找的单词:“text”;是否找到:是。

例如:“these are my texts”;要查找的单词:“text”;是否找到:否。

  • 它在 Linq To Entities 查询中,因此正则表达式无法使用?

编辑:

这基本上是我现在正在做的事情,我想用一个函数来替换它,该函数仅在找到精确匹配时返回。

    using (Model.Manager ctx = new Model.Manager())
    {
        var result = from p in ctx.Companies where p.Name.Contains(workLookingFor) select p;        
    }

目前的解决方案:

我可以在我的数据库上使用.Contains(),并在从数据库中获取的结果上使用正则表达式。由于精确匹配总是在.Contains()返回的更广泛的结果中(无论如何我仍然需要这些结果),因此这可能是一个不错的解决方案。


你能详细介绍一下Linq2Entities吗?比如提供一个代码示例? - nicodemus13
你不能在正则表达式匹配和\btext\b模式中使用.Select() - Brad Christie
@Brad Christie,请看我对Tim Roger答案的评论。 - Jeroen
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
2

这对我有用。虽然不完美,但可能会有所帮助。

 public static  bool matchWholeWord(string test, string search)
        {
            var index = test.IndexOf(search);
            if (index == -1)
                return false;

            var after = index + search.Length;
            if (after == test.Length)
                return true;

            return !char.IsLetterOrDigit(test[after]);
        }

在你的代码中:

using (Model.Manager ctx = new Model.Manager())
    {
        var result = from p in ctx.Companies 
        where matchWholeWord(p.Name, workLookingFor) 
        select p;        
    }

在具有3个文本字段和多个要搜索的单词的200,000条记录上,这将如何执行? - Jeroen

1

哎呀,但你给了我一个想法。我可以在我的数据库上使用.Contains(),并在从数据库中提取的结果上使用正则表达式。由于精确匹配总是在.Contains()的更广泛结果内部(无论如何我仍然需要它们),这可能是一个不错的解决方案。 - Jeroen

0
我最近使用了类似的东西来实现一个使用LINQ的搜索算法。我发现MSDN关于组合 LINQ和正则表达式的文章很有用,还有一个使用空格标记识别空格的正则表达式。通过使用我的搜索参数构建正则表达式,并将其与我的LINQ表达式结合起来,最终得到了我需要的结果。

LINQ to Entities 不认识 'System.Text.RegularExpressions.MatchCollection Matches(System.String)' 方法,而且这个方法无法被转换成存储表达式。 - Jeroen
很遗憾LINQ to Entities有这种行为。祝你好运。 - Julian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,