正则表达式.IsMatch没有返回预期的结果


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"的记录,但是我的查询没有返回任何匹配的记录。

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

试模式"^ [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]*$

这里,@符号表示从字面上读取字符串,而不解释控制字符

我希望这将帮助你…!

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新