0

我有一些带有许多经文的 html 页面,例如:

verses 2-5
verses 11-15
verses 21-23

我需要在“诗句”一词之前为每个数字添加一个代码

<a name="2"></a><a name="3"></a><a name="4"></a><a name="5"></a>verses 2-5

等等

所以它采用给定数字的范围,并在开始之前添加:

<a name=""></a>

对于范围内的每个数字..

我使用记事本++进行搜索和替换。

4

2 回答 2

0

您可以像这样对 10 到 99 的 2 位数诗句执行此操作:

Search: verses (\d)(\d)-
Replace: <a name="$1">verses $1$2-</a>

对于 3 位以上的数字,为多余的数字添加另一组并进行类似处理。

这个额外的复杂性是必需的,因为 notepad++ 不支持前瞻 AFAIK。

于 2013-01-10T00:37:09.660 回答
0

您将需要一个脚本来执行此操作。我编写了一个简单的 Ruby 脚本来完成它。在您的示例文本上使用它,得到您的输出。只需下载 Ruby,将其粘贴到该文本目录中的文件中,然后将该verses.txt行替换为您的文件名。然后从命令行运行它,如:ruby ./script.rb

d = File.read('./verses.txt')
c = d[0..d.length]
c.scan(/(verses\s+\d+-\d+)/) do |n|
  n.each do |a|
    a.scan(/(\d+-\d+)/) do |nums|
      z = nums.to_s.split(/-/)
      st=''
      in1 = z[0].gsub(/\["/, '').to_i
      in2 = z[1].chomp("\"]").to_i
      (in1..in2).each do |index|
        st += "<a name=\"#{index}\"></a>"
      end
      b = st + a;
      d.gsub!(a, b)
    end
  end
end
puts d
f = File.new('verses2.txt', "w")
f.write(d)

根据您的要求,这是一个修改,它将覆盖打开的文件并在目录中的所有文件上运行。为方便起见,我不会做目录输入,所以将脚本放在所有文件的目录中运行它。开始:

Dir.entries('.').each do |entry|
    entry.scan(/.*.html/) do
        |fn|
        d = File.read('./' + fn.to_s)
        c = d[0..d.length]
        c.scan(/(verses\s+\d+-\d+)/) do |n|
          n.each do |a|
            a.scan(/(\d+-\d+)/) do |nums|
              z = nums.to_s.split(/-/)
              st=''
              in1 = z[0].gsub(/\["/, '').to_i
              in2 = z[1].chomp("\"]").to_i
              (in1..in2).each do |index|
                st += "<a name=\"#{index}\"></a>"
              end
              b = st + a;
              d.gsub!(a, b)
            end
          end
        end
        puts d
        f = File.new('./' + fn.to_s, "w")
        f.write(d)
    end
end

我会考虑如何进行阿拉伯语编码。这将在所有文本文件上运行,如果它们具有不同的扩展名或具有相似的名称,请告诉我,我将更新脚本。

这应该完全有效,刚刚测试过。让我知道是否有问题。

于 2013-01-10T02:52:06.573 回答