负面前瞻有什么不对? Python正则表达式

时间:2018-03-27 18:26:22

标签: python html regex parsing

我需要来自html的解析链接,但是那些没有跟随' class =" mw-disambig"'的那些链接。我写了regexp

r'<a href="(.+?)"(?! class="mw-disambig")'

但它仍会解析类似这样的内容

  'https://ru.wikipedia.org/wiki/Тюльпан_(значения)" class='

原始HTML:

<a href="here was link" class="mw-disambig" title="Тюльпан"...>

它不应该被添加或者我不理解?

我做错了什么?

1 个答案:

答案 0 :(得分:0)

".*?"并不意味着&#34;恰好匹配引号中包含的最短序列。这意味着&#34;匹配引号中包含的最短序列,其中后面的字符与模式的其余部分匹配&#34;。

因此,当负向前瞻阻止最短匹配时,尝试下一个较长的匹配,结束于class=之后的引用。在那里,负向前瞻不会触发。

如果您只想匹配不包含引号的带引号的字符串,请显式:

"[^"]*"

(匹配报价,除报价以外的任意数量的字符以及结束报价)。