Skip to main content
 首页 » 编程设计

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

2024年10月17日36lyhabc

我想从字符串中分离出中间没有“:”且不以“.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”。显然,字符串的末尾后面没有任何内容,因为它是字符串的末尾。请记住,环视(前瞻或后视)、^、$ 或单词边界 \b 等 anchor 为 0 -宽度断言 并且不消耗字符,因此 (?!jpg|svg) 和 $ 从字符串中的相同位置进行测试。

你可以试试:

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

末尾的两个负向回顾确保字符串不以 .svg 或 .jpg 结尾。

[^:]* 避免字符串中出现任何 :。