在巨型文本上查找和替换URL的最佳方法是什么?

时间:2009-01-19 17:43:01

标签: regex

我对博客的帖子进行了大量备份。所有帖子都有如下图片:

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吗?有没有强大的工具来查找和替换这样的文本?感谢

6 个答案:

答案 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轻松学习。