我想从字符串中找出中间没有':'的链接,不要以'.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>
由于
答案 0 :(得分:2)
为什么你的模式不起作用:
.*[^:]
不会阻止:
出现在字符串中,因为.*
可以匹配它。
(?!jpg|svg)$
没有意义,因为它表示字符串的结尾后面没有“jpg”或“svg”。显然字符串的结尾没有跟随任何东西,因为它是字符串的结尾。请记住,环顾(前瞻或后瞻),^
,$
或字边\b
等锚点是零宽度断言和don' t消耗字符,因此(?!jpg|svg)
和$
从字符串中的相同位置进行测试。
您可以尝试:
r'^/wiki/[^:]*(?<!\.jpg)(?<!\.svg)$'
最后两个负面的后视图确保字符串不会以.svg
或.jpg
结尾。
[^:]*
可以避免字符串中的任何:
。