2013-01-09 41 views
0

我有经文的号码,如一些HTML页面添加书签的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

正则表达式不能这样做。你必须写一个脚本。 – Blender

+0

如果经文范围是划分的,那么基于内容如何使用JS进行DOM操作。这样你就不会“硬编码”书签,而是即时生成它们。 – Himanshu

回答

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 

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

这应该完全工作,只是测试它。让我知道是否有问题。

+0

它的伟大工程..感谢..但是当我用阿拉伯文字试试看,编码被乱码..怎么能解决吗?以及如何在相同的文件中进行编辑,以及如何在目录中对批量文件进行编辑? (我不想输入数百个文件的名称)..谢谢 – Mike

+0

不知道如何解决编码...狗屎。我将编辑答案,向您展示如何覆盖正在阅读的文件并遍历目录。目录中是否有所有文件的模式? – hjc1710

+0

如何在相同的输入文件中直接编辑代码而不创建新文件?并编辑该目录中的* .html文件而不给它任何文件名? – Mike

0

可以为2位数的经文10至99这样做:

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

对于3+位数字,加上另一组为额外的数字(S)和类似的对待。

这个额外的复杂因素是必需的,因为notepad ++不支持预读AFAIK。

+0

输出显示为:verses 25-,而不是诗句2-5 – Mike