你将需要一个脚本来做到这一点。我创建了一个简单的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
我会考虑如何做阿拉伯语编码。这将在所有文本文件上运行,如果它们具有不同的扩展名或具有相似的名称,请告诉我,我将更新脚本。
这应该完全工作,只是测试它。让我知道是否有问题。
正则表达式不能这样做。你必须写一个脚本。 – Blender
如果经文范围是划分的,那么基于内容如何使用JS进行DOM操作。这样你就不会“硬编码”书签,而是即时生成它们。 – Himanshu