【问题标题】:Trouble with Regular Expression and Ampersand正则表达式和 & 符号的问题
【发布时间】:2010-04-23 17:37:38
【问题描述】:

我在使用正则表达式(C#、ASP.NET)时遇到了一些问题,我很确定我做的事情根本上是错误的。我的任务是将动态创建的网格视图绑定到数据源,然后遍历网格中的列,查找字符串“A&I”。单元格中的数据(在模板列中)的示例如下:

Name: John Doe
Phone: 555-123-1234
Email: john.doe@url.com
Dept: DHS-A&I-MRB

这是我用来查找字符串值的代码:

foreach(GridViewRow gvrow in gv.Rows)
{
   Match m = Regex.Match(gvrow.Cells[6].Text,"A&I");

   if(m.Success)
   {
      gvrow.ForeColor = System.Drawing.Color.Red;
   }
}

我对这些变化没有任何运气: “A&I” “[A][&][I]”

但是当我严格使用“&”时,该行会变成红色。有什么建议么?

谢谢,丹

【问题讨论】:

    标签: c# asp.net expression


    【解决方案1】:

    Regex 对我来说看起来不错。我怀疑文本可能被编码为:

    A&I
    

    关于输入。

    你也可以用gvrow.Cells[6].Text.Contains("A&I") 代替正则表达式。或者 gvrow.Cells[6].Text.Contains("A&I") 如果我对编码问题是正确的。

    string.Contains 也比 Regex 快。

    您也可以在检查 A&I 发生之前在文本上HttpUtility.HtmlDecode

    【讨论】:

    • 感谢您的建议。我用了“A&I”,它奏效了。另外,非常感谢“包含”的建议——直到你告诉我我才知道!
    【解决方案2】:

    这两个都匹配成功:

    Match m = Regex.Match("DHS-A&I-MRB", "A&I");
    Match m0 = Regex.Match("DHS-A&I-MRB", @"A\&I");
    
    Debug.WriteLine("m.Success = " + m.Success.ToString());
    Debug.WriteLine("m0.Success = " + m0.Success.ToString());
    

    输出:

    m.Success = True
    m0.Success = True
    

    也许问题出在其他地方(可能是错误的 Cells 索引)?

    【讨论】:

    • 我使用了那个确切的例子,他们测试是真的。但是,在测试 gridview 输出时,它们会失败。我认为问题在于编码——我刚刚测试了“A&I”并且它有效。 (顺便说一句,我以前犯过错误的列索引……所以我在这里发帖之前检查了四次;)谢谢你的建议。 )
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2011-08-13
    • 2012-03-13
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多