2013-11-03 41 views
0

Eclipse油藏模擬器將ASCII數據文件作爲輸入。他們有辦法來壓縮保存的數據,所以輸入其保存的數據的時候,就必須擴大這樣說:用'*`替換所有`n *`後面的數據*

4*0 4*1 0 3*1 5*0 1 0 2*1 10*.2 
Expanded to 
0 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 1 0 1 1 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 

重複次數爲1以外任意正整數,並且數據可以是任何非負實數。

給定一串壓縮數據,使用正則表達式來實現擴展。我應該寫什麼替換線?希望在UltraEdit中有一個例子。腳本/宏被接受。

原正則表達式:

Find: (\d+)\*(\d) 
Replace: 
+2

搜索替換參數中的替換參數的語法不是正則表達式語法的一部分,完全取決於正在使用的工具。 –

+0

@MarkReed我更喜歡可以在UltraEdit中執行的解決方案,無論是內置引擎還是其UNIX引擎。感謝您指出。 –

+1

你需要一些圖靈完成機器來做到這一點 - 例如,ultraedit提供的宏腳本編程?要做擴展,你要求正則表達式能夠計數。如果沒有某種嵌入式代碼,它本身並不是一件好事。 – greatwolf

回答

1

這種類型的替換,需要在更換側一般的字符串表達式,而據我所知,用UltraEdit不提供與只是「查找/替換爲」接口。但是您可以編寫腳本來執行此操作:

UltraEdit.activeDocument.write( 
    UltraEdit.activeDocument.selection.replace(
    /(\d+)\*(\S+)/g, 
    function(_, count, value) { 
     return new Array(count-0+1).join(value+' ').replace(/ $/,''); } 
)); 
+0

我是UltraEdit中的宏/腳本編程新手。假設UltraEdit仍然可以匹配腳本中的搜索字符串,這是否意味着我必須使用循環來寫入這些數據? –

+0

我在此腳本之前添加了'var str = UltraEdit.activeDocument.selection;'。我將它保存爲're.js',將其加載到腳本列表中,選擇了一行'7 * 0 5 * 1 12 * 0 13 * 1 5 * 0 16 * 1 4 * 0',但並未替換。我也是新來的JavaScript。 –

+0

感謝您的腳本解決方案。 UltraEdit有一個Perl正則表達式引擎,是不是可以在以前的編輯中運行Perl代碼?我試圖把它放到查找字符串中,但沒有奏效。 –