或者改变单词边界的行为



下面的第一个Debug返回'unsbuscred''d,第二个返回unsbuscreb''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"这是因为第一个正则表达式匹配b(ab)(['w]+)b

它将在开头包含撇号,因为它使用了第二部分,其中开头不需要单词边界。

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

b字边界在字母数字字符和非字母数字字符之间匹配,因此它在'u之间匹配,但在<space>'之间不匹配。

您的交替操作将第一个正则表达式分离为

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

也许你的意思是

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

最新更新