Python 正则表达式:如何用前缀替换字符串中的所有 PNG 文件



我从野外收到一长串包含 png 文件的随机字符串。

前任。

"2016.png random characters vjifj903%.png unpredictable characters"

我想用前缀替换所有.png文件myserver.com/这样

"myserver.com/2016.png random characters myserver.com/vjifj903%.png unpredictable characters"

有没有办法做到这一点,使其不区分大小写,并且能够执行此功能?

我试过了

str.replace(".png","myserver.com/");但我不知道如何让它显示为前缀,这只是添加一个后缀。

正则表达式:

(?<=b)[^s]+?.png

替代:

myserver.com/

用法:

import re
p = re.compile(ur'(?<=b)[^s]+?.png')
test_str = u"2016.png random characters vjifj903%.png unpredictable characters"
subst = u"myserver.com/"
result = re.sub(p, subst, test_str)

这使得result变量:

myserver.com/2016.png random characters myserver.com/vjifj903%.png unpredictable characters

演示:

https://regex101.com/r/pJ0oS8/4

解释:

找到

一个单词边界,然后找到前面的非空格字符,直到 .png 。 然后在比赛前替补myserver.com/

您可以使用生成器:

>>> string = "2016.png random characters vjifj903%.png unpredictable characters"
>>> print(" ".join(("myserver.com/" * word.endswith(".png")) + word for word in string.split())
myserver.com/2016.png random characters myserver.com/vjifj903%.png unpredictable characters

如果您希望在字符串中分隔单词,则更简单:

>>> string = "2016.png random characters vjifj903%.png unpredictable characters"
>>> print [("myserver.com/" * word.endswith(".png")) + word for word in string.split()]
['myserver.com/2016.png', 'random', 'characters', 'myserver.com/vjifj903%.png', 'unpredictable', 'characters']

如果文件名中没有空格,这将起作用:

from __future__ import print_function
import re
prefix = 'myserver.com/'
s = "2016.png random characters vjifj903%.png unpredictable characters"
print(re.sub(r'([^s]*.png)', prefix + r'1', s, re.I))

输出:

myserver.com/2016.png random characters myserver.com/vjifj903%.png unpredictable characters

最新更新