我有一些包含大量诗句的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>
对于范围内的每个数字..
我使用notepad++进行搜索和替换。
发布于 2013-01-10 10:52:07
您将需要一个脚本来完成此操作。我编写了一个简单的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-10 08:37:10
您可以像这样对10到99的2位数执行此操作:
Search: verses (\d)(\d)-
Replace: <a name="$1">verses $1$2-</a>
对于3+数字号码,为额外的数字添加另一组,并以类似方式处理。
这个额外的复杂性是必需的,因为notepad++不支持look-aheads。
https://stackoverflow.com/questions/14248545
复制相似问题