如何将前瞻和 $ 与正则表达式一起使用

How to use lookahead and $ with Regex

我正在尝试获取资源的名称,我将与您分享 regexr url

我的实际正则表达式:([^/]+)(?=\..*)

我的例子:https://res-3.cloudinary.com/ngxcoder/image/upload/f_auto,q_auto/v1/blog-images/5oonz9.jpg

我正在尝试 5oonz9

我试过包括 $,但我不知道为什么它不起作用

您可以使用:

^.+\/(.+)\..+$
  • ^.+ - 从头开始​​,匹配尽可能多的字符
  • \/ - 匹配文字 /.
  • (.+) - 匹配一个或多个字符并将其捕获为一组
  • \. - 匹配文字 .
  • .+$ - 匹配字符串末尾的一个或多个字符(扩展名)

现场演示 here

方法有很多种:

下面的一对使用 python:

#使用正则表达式:

>>> file_name='https://res-3.cloudinary.com/ngxcoder/image/upload/f_auto,q_auto/v1/blog-images/5oonz9.jpg'
>>> regexpr = r".*/([^\/]+).jpg$"
>>> re.match(regexpr, file_name).group(1)
'5oonz9'
>>>

#获取任意文件名:

>>> regexpr = r".*/([^\/]+)$"
>>> re.match(regexpr, file_name).group(1)
'5oonz9.jpg'

#如果有兴趣,这里有一个使用 split & take last

>>> (file_name.split("/")[-1]).split(".")[0]
'5oonz9'
>>>

您不需要捕获组,只需要匹配:

(?<=\/)[^\/.]+(?=\.[^\/.]+$)

Demo

我们可以在free-spacing模式下编写表达式使其自记录:

(?<=      # begin a negative lookbehind
  \/      # match '/'
)         # end negative lookbehind
[^\]+     # match one or more characters other than '/'
(?=       # begin a positive lookahead
  \.      # match '.'
  [^\/]+  # match one or more characters other than '/'
  $       # match end of string
)         # end the positive lookahead

但是,您不应为此使用正则表达式,因为 Python 提供 os.path:

import os
str = 'https://res-3.cloudinary.com/ngxcoder/image/'\
      'upload/f_auto,q_auto/v1/blog-images/5oonz9.jpg'
base = os.path.basename(str)
print(os.path.splitext(base)[0])
  #=> "5oonz9"

这里base #=> "5oonz9.jpg".

See it in action

Doc

感谢其他答案,我找到了更直接的解决方案:

([^\/]+)(?=\.[^\/.]+$)

解释:

([^\/]+) 不匹配 1 个或多个 '/'

(?=\.) 向前看 '.'

[^\/.]+ 不匹配 1 个或多个“/”和“.” (这是关键!!)

$ 字符串结尾