正则表达式将图像扩展与Python中的动态网址匹配

时间:2018-04-16 16:31:42

标签: python regex

我正在创建一个正则表达式,该正则表达式匹配以带有图像扩展名的文件名结尾的网址。基本URL,文件名之前的所有内容,都是动态的。这就是我得到的:

import re

text = 'google.com/dsadasd/dsd.jpg'

dynamic_url = 'google.com/dsadasd'
regex = '{}/(.*)(.gif|.jpg|.jpeg|.tiff|.png)'.format(dynamic_url)

re.search(regex, text)

这可行,但通过,并且应该失败,使用以下URL:

text = 'google.com/dsadasd/.jpg'

只有在图像文件有文件名时才应该匹配。有什么方法可以解释这个吗?

如果这种方法有任何改进,你认为可以使正则表达式捕获我根据初始要求错过的其他边缘情况,def随意说出来。另外,如果有其他方法可以不利用正则表达式,那么这些方法也很受欢迎(也许是一个url解析?)。对我而言,最重要的两件事是性能和清晰度(速度性能最重要)。

3 个答案:

答案 0 :(得分:1)

您也可以直接申请os.path.splitext()

In [1]: import os

In [2]: text = 'google.com/dsadasd/dsd.jpg'

In [3]: _, extension = os.path.splitext(text)

In [4]: extension
Out[4]: '.jpg'

然后,您可以针对一组受支持的文件扩展名检查extension

答案 1 :(得分:0)

你可以试试这个:(.*)(\w+)(.gif|.jpg|.jpeg|.tiff|.png)'。只需在结尾.whatever之前添加一些检查。

答案 2 :(得分:0)

你可能会做的是使用锚来断言行的开始protected void INReplenishmentItem_Selected_FieldUpdating(PXCache cache, PXFieldUpdatingEventArgs e) { var row = (INReplenishmentItem)e.Row; if (row == null) return; INReplenishmentFilter filter = Base.Filter.Current; INReplenishmentFilterExt filterExt = PXCache<INReplenishmentFilter>.GetExtension<INReplenishmentFilterExt>(filter); decimal poAmount = filterExt.UsrPOAmount.HasValue ? filterExt.UsrPOAmount.Value : 0; decimal lastPrice = pvi.LastPrice.HasValue ? pvi.LastPrice.Value : 0; decimal newPOAmount = poAmount + lastPrice; cache.SetValue<INReplenishmentFilterExt.usrPOAmount>(filterExt, newPOAmount); } 和结束^或使用单词边界$

要防止在转发\b斜杠之后匹配例如.jpg,您可以添加character class并添加要为文件名允许的字符。

在此示例中,我添加了一个或多个单词字符和连字符/,但您可以根据需要更新

代码的正则表达式部分可能如下所示:

[\w-]+

Test Python