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"的记录,但我的查询不会返回任何匹配的记录。
我的正则表达式有问题吗?
答案 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();