【问题标题】:Or Changing Behavior of Word Boundry或改变词边界的行为
【发布时间】:2012-08-26 15:45:48
【问题描述】:

在第一个 Debug 下方返回 'unsbuscrib''d,第二个返回 unsbuscrib''d。不同的是领先的'。

我希望双方都返回 unsbuscrib'd。

    string textText = " 'unsbuscrib''d' ";
    Regex rTest = new Regex(@"\b(ab)|(['\w]+)\b");
    if (rTest.IsMatch(textText))
    {
        Debug.WriteLine(rTest.Match(textText).Value);
    }
    rTest = new Regex(@"\b(['\w]+)\b");
    if (rTest.IsMatch(textText))
    {
        Debug.WriteLine(rTest.Match(textText).Value);
    }

感谢 Guffa,解决方法是 @"\b((ab)|(['\w]+))\b"

【问题讨论】:

    标签: .net regex c#-4.0


    【解决方案1】:

    这是因为第一个正则表达式匹配\b(ab)(['\w]+)\b

    它将在开头包含撇号,因为它使用第二部分,在开头没有单词边界的要求。

    第二个正则表达式要求开头有单词边界,空格和撇号之间没有单词边界。第一个单词边界在撇号和字母u之间。

    【讨论】:

      【解决方案2】:

      \bword boundary 匹配字母数字字符和非数字字符,因此它匹配 'u,但不匹配 <space>'

      你的交替将第一个正则表达式分成

      \b(ab)   |   (['\w]+)\b
      

      也许你的意思

      \b(?:(ab)|(['\w]+))\b
      

      【讨论】:

        猜你喜欢
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多