Regex.IsMatch不会返回预期结果

时间:2014-03-20 06:25:55

标签: c# .net regex linq

var managementCount = from tbdocheader in context.tblDocumentHeaders
                      join tbDocRevision in context.tblDocumentRevisions
                      on tbdocheader.DocumentHeaderID equals tbDocRevision.DocumentHeaderID
                      select new { tbdocheader, tbDocRevision };    

var query =(from obj in managementCount.AsEnumerable()
                             where Regex.IsMatch(obj.tbDocRevision.Revision, @"[A-Za-z]%")
                             select obj).Count(); 

我试图将记录计入版本以字母表开头的位置。" managementCount"查询返回带有" Revision = A"的记录,但我的查询不会返回任何匹配的记录。

我的正则表达式有问题吗?

3 个答案:

答案 0 :(得分:2)

尝试模式“^ [A-Za-z] * $

这里

 ^ indicates start of an expression,

 $ indicates end of an expression,

 [A-Za-z] will allow any alphabet character and

 [A-Za-z]* will allow any length of alphabet characters.

在C#代码中,您将写:

@"^[A-Za-z]*$

这里,@符号表示按字面意思读取该字符串,否则不解释控制字符

我希望这会对你有帮助..!

答案 1 :(得分:1)

我认为您正在寻找带有额外参数"^[a-z]"的模式RegexOptions.IgnoreCase

在我看来,你已经习惯了SQL LIKE语法。正则表达式是不同的 - 它们使用不同的通配符,具有更多匹配能力,默认情况下在字符串中多次匹配,并且更难以正确使用。 SQL LIKE模式总是隐含地锚定在末尾,而正则表达式则不是。

所以上面的模式意味着,从字符串^的开头开始匹配,然后跟着一个字母。无需添加通配符,因为默认情况下不会锚定正则表达式。

我鼓励你去做一些阅读和学习。试试regular-expressions.info

答案 2 :(得分:1)

尝试模式"^[A-Za-z]" ...

var query =(from obj in managementCount.AsEnumerable()
                         where Regex.IsMatch(obj.tbDocRevision.Revision, @"^[A-Za-z]")
                         select obj).Count(); 
相关问题