我对博客的帖子进行了大量备份。所有帖子都有如下图片:
“http://www.mysite.com/nonono-nonono.jpg”
或
“http://www.mysite.com/nonono-nonono.gif”
甚至
“http://www.mysite.com/nonono.jpg”
但我在同一个域名上有其他链接,例如“”http://www.mysite.com/category/post.html“,我只想替换图片的网址(幸运的是所有图片都在网站的根目录上)。
我需要学习RegExp吗?有没有强大的工具来查找和替换这样的文本?感谢
答案 0 :(得分:1)
正则表达式将是您最好的选择......可能是这样的(基于来自strfriend的那个)?
^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.(jpg|gif|png))?
答案 1 :(得分:1)
正则表达式当然是一种方法,可能是最灵活的。但如果您的所有图片网址都以“http://www.mysite.com/”开头并以“.jpg”结尾,那么您可以使用字符串操作功能。例如,如果您有一个名为s的字符串变量,那么您要测试:
const string mysite = "http://www.mysite.com/";
const string jpg = ".jpg";
string newString = string.Empty;
if (s.BeginsWith(mysite))
{
if (s.EndsWith(jpg))
{
string textToReplace = s.SubString(mysite.Length, s.Length - mysite.Length - jpg.Length);
newString = s.Replace(textToReplace, "whatever you want to replace it with.");
}
}
这是一种相当强力的方法,但它会起作用。
答案 2 :(得分:1)
我在EditPad Pro上使用RegExp。我也会为初学者找到一个很好的教程。感谢小费@CalvinR
答案 3 :(得分:1)
可以使用正则表达式,但我可能会使用Beautiful Soup编写一个Python脚本:
# fix_imgs.py
import sys
from BeautifulSoup import BeautifulSoup
for filename in sys.argv[1:]:
contents = open(filename).read()
soup = BeautifulSoup(contents)
# replacing each img tag
for img in soup.findAll('img'):
img.src = img.src.replace("http://www.mysite.com", "http://www.example.com")
new_contents = str(soup)
output_filename = "replaced." + filename
open(output_filename, "w").write(new_contents)
答案 4 :(得分:0)
用图片网址中的“new_image_name_here
”替换所有文件名:
$ perl -pe's~(http://.*?/)[^/]+?\.(jpg|gif)\b~$1new_image_name_here.$2~g' huge_file.html > output.html
在“netloc
”中用“www.othersite.org”替换http://<netloc>/<image_path>
部分:
$ perl -pe's~(?<=http://)[^/]+(?=/(?:[^/]+/)*[^/]+?\.(?:jpg|gif)\b)~www.othersite.org~g' huge_file.html > output.html
这些正则表达式很简单,因此很容易被愚弄。为输入数据使用更具体的正则表达式。
答案 5 :(得分:0)
老实说,我认为你应该学习正则表达式,不管怎么说,这是一个很好的工具,特别是在这种情况下。它们是用于字符串操作的极其强大的工具,Perl也是一种很好的语言,可以同时学习使用Reg Exps轻松学习。