在第一个Debug下面返回'unsbuscrib''d,第二个返回unsbuscrib'。区别在于领先'。
我希望两者都能返回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);
}
修复是@“\ b((ab)|(['\ w] +))\ b”感谢Guffa
答案 0 :(得分:1)
这是因为第一个正则表达式与\b(ab)
或(['\w]+)\b
匹配。
它将在开头包含撇号,因为它使用第二部分,其中开头不需要单词边界。
第二个正则表达式在开头需要一个单词边界,空格和撇号之间没有单词边界。第一个单词边界位于撇号和字母u
之间。
答案 1 :(得分:0)
\b
word boundary匹配字母数字字符和非alnum字符,因此它在'
和u
之间匹配,但在<space>
之间不匹配'
。
你的交替将第一个正则表达式分成
\b(ab) | (['\w]+)\b
也许你的意思是
\b(?:(ab)|(['\w]+))\b