2014-08-28 155 views
2

刪除不需要的文本,我想從一個大的字符串中提取只有少數信息,如正則表達式從字符串

[[["좋은","good","joh-eun",""]],[["adjective",[["좋은",["good","nice","pretty","admirable","canny","tenacious"],,0.38553435]],"good",4],["adverb",["훌륭하게",["wonderfully","good","nicely","beautifully","fine","finely"],,0.00029145498],"good",4]]] 

我想提取這樣

좋은 - good 
좋은 - good,nice,pretty,admirable,canny,tenacious (basically adjectives) 
훌륭하게 - wonderfully,good,nicely,beautifully,fine,finely (adverbs) 

字符串,請幫助我試着使用SED和管道切割像

cut --delimiter='"' -f 1-2 and then use sed 's/\[\[\[\"//' 

這是給我的第一個韓國좋은作爲結果,我無法擴展此以獲得所需的結果! 如果還有其他更好的方法來實現這一點,請提出建議。 在此先感謝。

+0

是你的真實投入的例證嗎? []的格式似乎不連貫... – Tensibai 2014-08-28 12:30:58

+0

你能區分你想從你想要更精確地丟棄的東西中「提取」嗎? (電腦(或我們)不能對「基本」做任何事情)。如果你不能 - 如果你想包括所有的副詞和/或形容詞,那麼我們需要思考基於字典的解決方案 – drewmoore 2014-08-28 12:31:20

+0

@Tensibai - 它的短版實際輸入..我錯過了方括號,我想編輯一次我可以訪問計算機(現在打電話) – Magic 2014-08-28 12:37:36

回答

1

這裏是一塊紅寶石,但可能任何PCRE裝備工具可以做同樣的事情:

ruby -ne ' 
    $_.gsub(/"/,"") 
     .scan(/ (\p{Hangul}+) ,\[? (.+?) \] /x) {|m| puts m[0] + " - " + m[1]} 
' <<END 
[[["좋은","good","joh-eun",""]],[["adjective",[["좋은",["good","nice","pretty","admirable","canny","tenacious"],,0.38553435]],"good",4],["adverb",["훌륭하게",["wonderfully","good","nicely","beautifully","fine","finely"],,0.00029145498],"good",4]]] 
END 
좋은 - good,joh-eun, 
좋은 - good,nice,pretty,admirable,canny,tenacious 
훌륭하게 - wonderfully,good,nicely,beautifully,fine,finely 

太糟糕了,原文不容易處理JSON。

感謝this question如何匹配韓文字符。

+0

thnx,我沒有關於紅寶石的知識,我會檢查並返回到U. – Magic 2014-08-28 13:04:37

2

晚了一點,但在純粹的正則表達式適合的sed:

正則表達式:\[\[\["(.*?)","(.*?)"\]\],\[\["(.*?)",\[\["(.*?)",\["(.*?)"\],.*?\]\],.*?\],\["(.*?)",\["(.*?)",\["(.*)"\],.*\]\]\]

換人:\1 - \2\n\4 - \5 (\3)\n\7 - \8 (\6)

demo

假設總有在一部開拓創新的線形容詞和副詞支架。 ..(即使空)

查看subst在演示中展示如何重組匹配。