Извлечь определенное слово из текста - PullRequest
2 голосов
/ 26 марта 2011

Мне нужно извлечь слово, следующее за '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] ?)))

Итак, когда я анализирую это .. используя Regex, мне нужно извлечь только слово '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 ]

2 голосов
/ 27 марта 2011

Учитывая, что формат не допускает много странных вещей, это должно получить слово:

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

, а затем сделать Sth. как

if (matcher.find(yourstring)) {
  theword = matcher.group(1);
}
0 голосов
/ 26 марта 2011

Следующее регулярное выражение будет соответствовать блоку NN, где группа (. *) Выберет «мысль».

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

Я всегда нахожу, что тестовые стенды с регулярными выражениями очень полезны для этого видапроблемы.Я рекомендую использовать: http://www.gskinner.com/RegExr/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...