2014-08-28 294 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在演示中展示如何重组匹配。