从文本中提取特定单词

时间:2011-03-26 20:45:57

标签: java regex

我需要在这个特定句子中提取“NN”后面的单词吗?

(ROOT (SBARQ [26.015] (WHNP [1.500] (WP [1.051] What)) (SQ[23.912] (VBZ[2.669]'s)
(NP [19.076] (PRP$ [3.816] your) (NN [9.843] thought))) (. [0.002] ?)))

所以,当我解析这个...使用正则表达式时,我只需要提取'think'这个词。

我该怎么做?

我的代码:

String pattern = "\NN \[[0-9]+(?:\.[0-9])?\] (.)\)"; 
Pattern r = Pattern.compile(pattern); 
Matcher m = r.matcher(st); while(m.find()) {System.out.println(m.group());}

output: (NN [9.843] thought))) (. [0.002] ?)))

但我只想要'思想'

答案:

得到它:-)感谢人们。

String pattern = "NN \\[.*] (\\w+)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(st);
while(m.find())
{System.out.println(m.group(1));}

输出:想法

2 个答案:

答案 0 :(得分:2)

鉴于格式不允许太多的变态,这应该得到一个词:

\(NN \[[^\]]*\] ([^\)]*)\)

然后做s.th.喜欢

if (matcher.find(yourstring)) {
  theword = matcher.group(1);
}

答案 1 :(得分:0)

以下正则表达式将与NN块匹配,其中(。*)组将选择“思考”。

\(NN \[[0-9]+(?:\.[0-9]*)?\] (.*)\)

我总是发现正则表达式测试床对这类问题非常有用。我建议使用: http://www.gskinner.com/RegExr/