2013-10-04 25 views
1

我試圖用Notepad ++解析一些svg座標。我想獲取每個圖層的座標集,並將[]中的座標設置爲可以在javascript數組中使用。正則表達式刪除文件中除字符串以外的所有內容

SVG文件看起來是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build  43363) --> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="800px" 
height="900px" viewBox="0 0 800 900" enable-background="new 0 0 800 900" xml:space="preserve"> 
<g id="Layer_3"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="33,108 66,141 99,174 99,207 132,207 165,207 165,240  "/> 
</g> 
<g id="Layer_4"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="132,306 165,306 165,339 165,372 132,405 99,405 99,438 132,438 
    165,438  "/> 
</g> 
<g id="Layer_5"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="198,339 231,339 264,372 297,372 330,405 363,438 396,438  "/> 
</g> 
<g id="Layer_6"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="198,174 198,273 231,306 264,306  "/> 
</g> 
<g id="Layer_7"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="231,174 231,240 264,273 297,273  "/> 
</g> 
<g id="Layer_9"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="396,306 462,306 495,339 495,372 528,405 528,438 561,438 
    594,471  "/> 
</g> 
<g id="Layer_10"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="660,504 561,504 495,504  "/> 
</g> 
</svg> 

我想結果是這個樣子:

[33,108 66,141 99,174 99,207 132,207 165,207 165,240] 

[132,306 165,306 165,339 165,372 132,405 99,405 99,438 132,438 165,438] 

[198,339 231,339 264,372 297,372 330,405 363,438 396,438] 

[198,174 198,273 231,306 264,306] 

[231,174 231,240 264,273 297,273] 

[396,306 462,306 495,339 495,372 528,405 528,438 561,438 594,471] 

[660,504 561,504 495,504] 

我是很新的正則表達式,但這裏是我的愚蠢的嘗試:

搜索: 「(。+」)+積分=

替換爲:[$ 1]

我被卡住了,因爲搜索部分似乎沒有搜索「點」字符串上方的行。即使文檔中有更高的垃圾,我怎樣才能擺脫除座標之外的所有內容?

+1

不要使用正則表達式解析XML。使用真正的XML解析器。這已經在這裏提到了大約一百萬次。使用適當的工具來完成這項工作,而不是試圖讓所有東西都變成釘子,這樣就可以使用錘子。 –

+1

我沒有動態解析。你能解釋爲什麼Notepadd ++不適用於像這樣的基本離線編輯嗎? –

+1

它會,但如果它是一次性的事情,你可以使用多個操作來獲得你需要的結果,並且沒有必要嘗試在一個正則表達式中執行。如果這是一個反覆出現的任務(需要定期執行的任務),請使用一個XML解析器,它可以大幅簡化您的工作。 (無論如何,我很困惑;你的問題是關於檢索「點」值,然後詢問爲什麼「點」之前的部分沒有被使用,這似乎很清楚:你要求「點」值。以「c」開頭的單詞等待 - 在第一個「c」單詞之前的「a」和「b」單詞無法正常工作。「?) –

回答

0

首先,我不得不同意Ken White關於不使用正則表達式解析XML的問題。但是如果你想在記事本++試試這一個快速和骯髒的解決方案(別忘了勾選「匹配換行。」):

查找:

.+?points="(.+?)\s*" 

替換:

[$1]\n\n 

這將幾乎給你預期的結果(你仍然必須手動刪除一些尾隨字符)。

+0

謝謝!尤其是「。換行符」是有價值的信息!你的解決方案很好用! –

相關問題