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

标签 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)$'

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

谢谢

最佳答案

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

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

(?!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/

相关文章:

Java:从 URL 获取整数值

Python 如何使用 map() 将列表拆分为子列表?

python - 如何合并 Jupyter 笔记本中的更改

php - 我正在尝试拆分/分解/preg_split 一个字符串,但我想保留分隔符

regex - 用单个 Regex.Replace() 替换多个字符串 Replace()

java - 来自缓存字符串的 Pattern.compile() 与缓存已编译模式

Python - 在用户输入上方有一个变化的 ASCII 图像

python - 如何在 Flask 中设置不同的子域(使用蓝图)?

python - 如何以自定义方式呈现 CheckboxGroup(或任何其他元素)?

regex - 正则表达式,检查出现的范围