为什么这个正则表达式不起作用?

时间:2016-10-08 18:27:39

标签: python regex

我想从字符串中找出中间没有':'的链接,不要以'.jpg'或'.svg'结尾,也要以'/wiki/'开头。

所以这些都是错的 -

"https://boomerrang.com"
"/wiki/sbsbs:kjanw"
"/wiki/aswaa:asawsa.jpg"
"/wiki/awssa.random.jpg"
"/wiki/boom.jpg"

最终结果应如何 -

"/wiki/justthis"

我尝试了什么 -

r'^/wiki/.*[^:](?!jpg|svg)$'

但它没有正确评估,事实上它给出了我不想要的所有结果......我对正则表达式有点新意,所以请告诉我为什么这不起作用,我应该如何纠正它。 / p>

由于

1 个答案:

答案 0 :(得分:2)

为什么你的模式不起作用:

.*[^:]不会阻止:出现在字符串中,因为.*可以匹配它。

(?!jpg|svg)$没有意义,因为它表示字符串的结尾后面没有“jpg”或“svg”。显然字符串的结尾没有跟随任何东西,因为它是字符串的结尾。请记住,环顾(前瞻或后瞻),^$或字边\b等锚点是零宽度断言和don' t消耗字符,因此(?!jpg|svg)$从字符串中的相同位置进行测试。

您可以尝试:

r'^/wiki/[^:]*(?<!\.jpg)(?<!\.svg)$'

最后两个负面的后视图确保字符串不会以.svg.jpg结尾。

[^:]*可以避免字符串中的任何: