regex Python正则表达式,用于获取最接近的匹配项,而不包含重复内容

abithluo  于 2022-12-05  发布在  Python
关注(0)|答案(3)|浏览(84)

"我所需要的"
我有一个img src链接列表。下面是一个例子:

  • https://studiocake.kiev.ua/wp-content/webpc-passthru.php?src=https://studiocake.kiev.ua/wp-content/uploads/photo_2020-12-27_12-18-00-2-333x444.jpg&nocache=1
  • https://studiocake.kiev.ua/wp-content/webpc-passthru.php?src=https://studiocake.kiev.ua/wp-content/uploads/IMG_4945-333x444.jpeg&nocache=1
  • https://studiocake.kiev.ua/wp-content/webpc-passthru.php?src=https://studiocake.kiev.ua/wp-content/uploads/tri-shokolada.png&nocache=1

我需要得到以下结果:

studiocake.kiev.ua/wp-content/uploads/photo_2020-12-27_12-18-00-2-333x444.jpg

studiocake.kiev.ua/wp-content/uploads/IMG_4945-333x444.jpeg

studiocake.kiev.ua/wp-content/uploads/tri-shokolada.png

问题

我使用以下正则表达式:

studiocake\.kiev\.ua.*(jpeg|png|jpg)

但是它并没有按照我需要的方式工作。我得到的不是我需要的结果,而是这样的链接:

studiocake.kiev.ua/wp-content/webpc-passthru.php?src=https://studiocake.kiev.ua/wp-content/uploads/photo_2020-12-27_12-18-00-2-333x444.jpg

问题

如何使用Python正则表达式获得所需的结果

n53p2ov0

n53p2ov01#

您可以让greedy.* * 消耗 * 起始匹配,capture消耗后者。

import re

matches = re.findall(r"(?i).*\b(studiocake\.kiev\.ua\S*\b(?:jpeg|png|jpg))\b", s)

See this demo at regex101group 1 中的匹配项)或www.example.com上的Python演示tio.run
内部使用了\S*来匹配characters other than a whitespaceany amount
我进一步添加了一些\bword boundaries(?i) -flag,用于 * 忽略大小写 *。

64jmpszr

64jmpszr2#

你想要实现的是对URL的标准操作,python有很多库来实现这一点。在这个练习中,我建议使用URL解析库,而不是使用regex,它提供了标准操作,并提供了更好的代码。

from urllib.parse import urlparse, parse_qs

def extractSrc(strUrl):
  # Parse original URL using urllib
  parsed_url = urlparse(strUrl)

  # Find the value of query parameter img
  src_value = parse_qs(parsed_url.query)['src'][0]
  
  # Again, using same library, parse img url which we got above.
  img_parsed_url = urlparse(src_value)

  # Remove the scheme in the img URL and return result.
  scheme = "%s://" % img_parsed_url.scheme
  return img_parsed_url.geturl().replace(scheme, '', 1)


urls = '''https://studiocake.kiev.ua/wp-content/webpc-passthru.php?src=https://studiocake.kiev.ua/wp-content/uploads/photo_2020-12-27_12-18-00-2-333x444.jpg&nocache=1
https://studiocake.kiev.ua/wp-content/webpc-passthru.php?src=https://studiocake.kiev.ua/wp-content/uploads/IMG_4945-333x444.jpeg&nocache=1
https://studiocake.kiev.ua/wp-content/webpc-passthru.php?src=https://studiocake.kiev.ua/wp-content/uploads/tri-shokolada.png&nocache=1'''

for u in urls.split('\n'):
  print(extractSrc(u))

输出量:

studiocake.kiev.ua/wp-content/uploads/photo_2020-12-27_12-18-00-2-333x444.jpg
studiocake.kiev.ua/wp-content/uploads/IMG_4945-333x444.jpeg
studiocake.kiev.ua/wp-content/uploads/tri-shokolada.png
dfuffjeb

dfuffjeb3#

我的表情是这样的

(https://)(studiocake\.kiev\.ua.*(php)\?src=https://)(studiocake\.kiev\.ua.*(jpeg|png|jpg))(&nocache=1)

将其替换为$4

说明...

我只是选择了部分中的所有链接,然后将其替换为所需的特定部分。

相关问题