.NET负向lookbehind正则表达式没有按预期工作

时间:2015-03-30 16:33:55

标签: .net regex negative-lookbehind

我想在字符串

中分隔首字母“Wrs”
"agendapunt 5.4 (GAIA) asdf <BR>    Wrs    <BR>         medegedeeld"

这是我正在使用的正则表达式:

(?<!<BR>)(\s{2,}[a-z]+\s{2,})(?=<BR>)

首字母“Wrs”必须后跟至少两个空格,然后是html break <BR>。 此外,首字母“Wrs”必须以至少两个空格开头,且不得以HTML <BR>标记开头。

不幸的是,在上面的示例中,即使使用前面的<BR>标记,首字母仍然存在正匹配。 我不明白为什么,因为正面的前瞻似乎确实像我期望的那样工作。 I.E.当我从输入字符串中删除第二个<BR>标记或其中的一部分时,则找不到匹配项。

此外,我尝试使用积极的lookbehind而不是消极的只是看它会做什么,它也完全按照我的预期工作。 在这种情况下,似乎正面和负面的外观都不符合相同的规则。

知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

你正在寻找的正则表达式是

(?<!<BR>\s{2,})(?<=\s{2,})([a-z]+)(?=\s{2,}<BR>)

使用IgnoreCase选项。

原因是,在不允许<BR>之后,如果允许,我们必须匹配空格。 Lookbehinds不消耗文本,因此,在后视中,我们需要在第一个消费者之前检查所有前面的字符。

我希望现在更清楚了。

请参阅example