2013-01-09 35 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