【问题标题】:Regex.IsMatch does not return expected resultRegex.IsMatch 不返回预期结果
【发布时间】:2014-03-20 06:25:55
【问题描述】:
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(); 

我正在尝试获取 Revision 以字母开头的记录数。“managementCount”查询返回带有“Revision=A”的记录,但我的查询没有返回任何匹配的记录。

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

【问题讨论】:

    标签: c# .net regex linq


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨!在sql server中执行sql查询时是否必须更改正则表达式?因为对于 sql server,似乎表达式必须是 [A-Za-z]%,是的,上面的表达式仅适用于 LINQ 查询
    • 在 SQL % 中的用途与正则表达式中的 * 相同。这意味着 [A-Za-z]% 将允许任意长度的字母字符。
    • “这里再次@表示表达式的开始”是错误的。 @ 符号表示逐字字符串,而不是表达式。见this question
    • @cremor 谢谢伙计..!我很抱歉。我已经修改了答案。
    • % 和 * 不是理智的。 % 修改最后一个匹配元素,本身不起作用。
    【解决方案2】:

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

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

    【讨论】:

    • 嗨!当我使用 ^[A-Za-z] 时它工作正常,但是我在 sql server 中尝试了相同的 reg 表达式,但它不起作用。对于 sql server,我不得不将正则表达式更改为 [A-Za-z]%。可能是什么原因?
    • Regex.IsMatch() 在 .NET 中执行,而不是在 TSQL 中执行,因此它使用标准的正则表达式语法。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 嗨!当我使用 ^[A-Za-z] 时它工作正常,但是我在 sql server 中尝试了相同的 reg 表达式,但它不起作用。对于 sql server,我不得不将正则表达式更改为 [A-Za-z]%。可能是什么原因?
    • SQL Server 没有实现真正的正则表达式,只是一些基本的模式匹配。语法不同。
    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2018-11-15
    相关资源
    最近更新 更多