【问题标题】:Find word (not containing substrings) in comma separated string在逗号分隔的字符串中查找单词(不包含子字符串)
【发布时间】:2013-01-08 09:02:31
【问题描述】:

我正在使用 linq 查询,我在其中执行类似这样的操作:

viewModel.REGISTRATIONGRPS = (From a In db.TABLEA
    Select New SubViewModel With {
    .SOMEVALUE1 = a.SOMEVALUE1,
    ...
    ...
    .SOMEVALUE2 = If(commaseparatedstring.Contains(a.SOMEVALUE1), True, False)
    }).ToList()

现在我的问题是这不会搜索单词而是搜索子字符串,例如:

逗号分隔字符串 = "EWM,KI,KP" SOMEVALUE1 = "EW"

它返回 true 是因为它包含在 EWM 中吗?

我需要的是在逗号分隔的字符串中查找单词(不包含子字符串)!

【问题讨论】:

    标签: asp.net linq search csv asp.net-mvc-4


    【解决方案1】:

    选项 1:正则表达式

    Regex.IsMatch(commaseparatedstring, @"\b" + Regex.Escape(a.SOMEVALUE1) + @"\b")
    

    \b 部分被称为“word boundaries”并告诉正则表达式引擎您正在寻找“完整单词”。 Regex.Escape(...) 确保正则表达式引擎不会尝试解释您尝试匹配的文本中的“特殊字符”。例如,如果您尝试匹配"one+two",则Regex.Escape 方法将返回"one\+two"

    另外,请务必在代码文件的顶部包含 System.Text.RegularExpressions。

    有关详细信息,请参阅 MSDN 上的 Regex.IsMatch Method (String, String)

    选项 2:拆分字符串

    您也可以尝试拆分字符串,这样会更简单一些,但效率可能会更低。

    commaseparatedstring.Split(new Char[] { ',' }).Contains( a.SOMEVALUE1 )
    

    【讨论】:

    • 感谢您的详细解释,但我在这两个选项上都得到了 'LINQ to Entities' System.NotSupportedException?
    • 好的,我最终在查询 Dim fn As New List(Of String)(dataObject.REGISTRATIONGRP.Split(","c)) 之外进行拆分,然后在 If(fn.Contains(benutzergrp.BENUTZERGRP_KUERZEL), True, False) 内部进行拆分,这似乎可行。
    【解决方案2】:

    怎么样:
    - 用逗号分隔逗号分隔字符串
    - 在每个子字符串上调用 equals() 而不是在整个事物上调用 contains()?

    【讨论】:

      【解决方案3】:

      .SOMEVALUE2 = If(commaseparatedstring.Split(',').Contains(a.SOMEVALUE1), True, False)

      【讨论】:

        猜你喜欢
        • 2013-05-31
        • 2018-06-26
        • 1970-01-01
        • 2016-05-28
        • 2020-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-04
        相关资源
        最近更新 更多