0

在第一个 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"

4

2 回答 2

1

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

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

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

于 2012-08-26T15:51:37.000 回答
0

字母数字字符和非字母数字字符之间的单词边界匹配,因此它匹配and\b 'u匹配<space>and '

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

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

也许你的意思是

\b(?:(ab)|(['\w]+))\b
于 2012-08-26T15:51:24.707 回答