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

时间:2013-01-24 14:54:22

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

我正在使用linq查询,我在这里做了类似的事情:

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

现在我的问题是,它确实搜索单词,但是搜索子字符串,例如:

commaseparatedstring =" EWM,KI,KP" SOMEVALUE1 =" EW"

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

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

3 个答案:

答案 0 :(得分:2)

选项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 )

答案 1 :(得分:1)

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

答案 2 :(得分:0)

.SOMEVALUE2 = If(commaseparatedstring.Split(',')。包含(a.SOMEVALUE1),True,False)