Я пытаюсь извлечь заданный шаблон из текстового файла, однако результаты не на 100% соответствуют моим ожиданиям.
Вот мой код:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ParseText1 {
public static void main(String[] args) {
String content = "<p>Yada yada yada <code> foo ddd</code>yada yada ...\n"
+ "more here <2004-08-24> bar<Bob Joe> etc etc\n"
+ "more here again <2004-09-24> bar<Bob Joe> <Fred Kej> etc etc\n"
+ "more here again <2004-08-24> bar<Bob Joe><Fred Kej> etc etc\n"
+ "and still more <2004-08-21><2004-08-21> baz <John Doe> and now <code>the end</code> </p>\n";
Pattern p = Pattern
.compile("<[1234567890]{4}-[1234567890]{2}-[1234567890]{2}>.*?<[^%0-9/]*>",
Pattern.MULTILINE);
Matcher m = p.matcher(content);
// print all the matches that we find
while (m.find()) {
System.out.println(m.group());
}
}
}
Вывод, который я получаю:
<2004-08-24> bar<Bob Joe>
<2004-09-24> bar<Bob Joe> <Fred Kej>
<2004-08-24> bar<Bob Joe><Fred Kej>
<2004-08-21><2004-08-21> baz <John Doe> and now <code>
Вывод, который я хочу получить:
<2004-08-24> bar<Bob Joe>
<2004-08-24> bar<Bob Joe>
<2004-08-24> bar<Bob Joe>
<2004-08-21> baz <John Doe>
Короче говоря, последовательность «дата», «текст (или пробел)» и «имя» должна быть извлечена. Всего остального следует избегать. Например, у тега «Fred Kej» не было никакого тега «date» перед ним, поэтому он должен быть помечен как недействительный.
Также, как дополнительный вопрос, есть ли способ сохранить или отследить фрагменты текста, которые были пропущены / отклонены, как и действительные тексты.
Спасибо, Брайан