У меня есть документ, хранящийся в виде большой строки. В строке у меня есть несколько встроенных тегов XML, и я хочу получить слова между тегами. Документы могут также содержать HTML-теги, поскольку документы часто являются веб-сайтами.
Пример документа:
"
Меня зовут <ЧЕЛОВЕК> Бобби , я живу в США."
Текущий RegEx:
Pattern p = Pattern.compile("<(LOCATION|PERSON|ORGANIZATION)>[\\w[ '\"/\\!%$\\(\\)\\-\\+]]*</(LOCATION|PERSON|ORGANIZATION)>");
Matcher m = p.matcher("I'm <PERSON>Graham Brown</PERSON> I went to the <LOCATION>USA'S</LOCATION>");
while(m.find()){
System.out.println(m.group());
}
Результат = <ЛИЦО> Бобби </ ЛИЦО> <МЕСТО> США </ МЕСТО>
Это прекрасно работает с большинством понятий и грамматик, но регулярное выражение должно позволять находить любой шаблон персонажа между тегами. Когда я пытаюсь использовать «.» (любой символ), как показано ниже, возвращает всю строку.
"
Меня зовут <ЧЕЛОВЕК> Бобби , я живу в США."
Pattern p = Pattern.compile("<(LOCATION|PERSON|ORGANIZATION)>.</(LOCATION|PERSON|ORGANIZATION)>");
Как вернуть какие-либо символы между угловыми открывающими и закрывающими тегами?
РЕДАКТИРОВАТЬ: Спасибо за ваши ответы. Просто и за помощь в получении правильного ответа.
Для пояснения я пометил именованные объекты, используя NER. Если вы не знаете, что это такое, ознакомьтесь с некоторыми из статей, на которые я ссылался, внизу.
Все, что меня интересует - это получить текст между тремя открывающими и закрывающими тегами. Других тегов нет, и документы не являются файлами XML, и я не анализирую все теги HTML и не интересуюсь ими. Все, что меня интересует, это парсинг созданных мной тегов XML, поэтому я считаю, что RegEx - самый простой способ сделать это.
Документы, которые будут добавлены позже ...