【问题标题】:Regex to parse out a part of URL using python正则表达式使用 python 解析出 URL 的一部分
【发布时间】:2017-01-06 04:08:48
【问题描述】:

我的数据如下,

data['url']
http://hostname.com/aaa/uploads/2013/11/a-b-c-d.jpg https://www.aaa.com/
http://hostname.com/bbb/uploads/2013/11/e-f-g-h.gif https://www.aaa.com/
http://hostname.com/ccc/uploads/2013/11/e-f-g-h.png http://hostname.com/ccc/uploads/2013/11/a-a-a-a.html 
http://hostname.com/ddd/uploads/2013/11/w-e-r-t.ico
http://hostname.com/ddd/uploads/2013/11/r-t-y-u.aspx https://www.aaa.com/
http://hostname.com/bbb/uploads/2013/11/t-r-w-q.jpeg https://www.aaa.com/

我想找出 .jpg、.gif、.png、.ico、.aspx、.html、.jpeg 等格式并向后解析,直到找到“/”。我还想检查整个字符串中是否出现了几次。我的输出应该是,

data['parsed']
a-b-c-d
e-f-g-h
e-f-g-h a-a-a-a
w-e-r-t
r-t-y-u
t-r-w-q

我在想,不是为每种格式编写单独的命令,而是有一种方法可以在单个命令下编写所有内容。

谁能帮我写这些命令?我是正则表达式的新手,任何帮助将不胜感激。

【问题讨论】:

  • 必须用正则表达式完成吗? urlparse(如可能的重复项中所述)出色地完成了这项工作。
  • @JIm 是的。我有几个这样的条件,并且 URL 的结构不足以通过 urlparse 进行解析

标签: python regex python-2.7 python-3.x regex-negation


【解决方案1】:

这会建立一个名称到扩展对的列表

import re
results = []
for link in data:
    matches = re.search(r'/(\w-\w-\w-\w)\.(\w{2,})\b', link)
    results.append((matches.group(1), matches.group(2)))

【讨论】:

  • jpeg、aspx、html等4个字母不工作
  • 移除了扩展字符限制
【解决方案2】:

此模式返回文件名。我刚刚使用了您的一个 url 来演示,您可以简单地将匹配项附加到结果列表中:

import re
url = "http://hostname.com/ccc/uploads/2013/11/e-f-g-h.png http://hostname.com/ccc/uploads/2013/11/a-a-a-a.html" 

p = r'((?:[a-z]-){3}[a-z]).'
matches = re.findall(p, url)

>>> print('\n'.join(matches))
e-f-g-h
a-a-a-a

假设所有网址都具有您提供的一般形式。

【讨论】:

    【解决方案3】:

    你可以试试这个:

    data['parse'] = re.findall(r'[^/]+\.[a-z]+ ',data['url'])
    

    这将挑选出所有带有扩展名的文件名。如果您想删除扩展,上面的代码会返回一个列表,然后您可以使用列表理解和 re.sub 处理该列表,如下所示:

    [re.sub('\.[a-z]+$','',exp) for exp in data['parse']]
    

    使用 .join 函数创建一个字符串,如 Totem 的答案所示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2011-03-20
      • 2016-12-30
      • 2010-10-23
      相关资源
      最近更新 更多