我想从字符串中分离出链接,这些链接之间没有“:”,并且不以“.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)$'
但它没有正确评估,事实上它给出了我不想要的所有结果...我对正则表达式有点陌生,所以请告诉我为什么这不起作用,以及我应该如何纠正它。
谢谢
最佳答案
为什么你的模式不起作用:
.*[^:]
不会阻止 :
出现在字符串中,因为 .*
可以匹配它。
(?!jpg|svg)$
没有意义,因为它表示字符串末尾后面没有“jpg”或“svg”。显然,字符串的末尾后面没有任何内容,因为它是字符串的末尾。请记住,环视(lookahead 或lookbehind)、诸如 ^
、$
或字边界 \b
之类的 anchor 为零-width 断言并且不消耗字符,因此 (?!jpg|svg)
和 $
从字符串中的相同位置进行测试。
你可以尝试一下:
r'^/wiki/[^:]*(?<!\.jpg)(?<!\.svg)$'
末尾的两个负向后查找可确保字符串不以 .svg
或 .jpg
结尾。
[^:]*
避免字符串中出现任何 :
。
关于python - 为什么这个正则表达式不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935867/