Я написал программу в Java, используя RE для извлечения нескольких сведений.
Код предназначен для извлечения некоторой информации из текстового файла (который после = и перед знаком |), что информация находится в середина {{cite book .....}}
Мой код:
final String regex = "(?:\\{\\{cite book\\b[^|]*|\\G(?!^))(?=[^}]*}})\\|([^=]+)=([^|}]+)";
final Pattern pattern1 = Pattern.compile(regex);
final Matcher matcher1 = pattern1.matcher(wikifile);
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("\n BOOK: \n ");
while (matcher1.find()) {
if (matcher1.group(1).trim().equals("title")) System.out.println("\n----------------------\n");
if (matcher1.group(1).trim().equals("title")||matcher1.group(1).trim().equals("first")||matcher1.group(1).trim().equals("last")||matcher1.group(1).trim().equals("auther")||matcher1.group(1).trim().equals("url") || matcher1.group(1).trim().equals("publisher") ||matcher1.group(1).trim().equals("isbn")) {
System.out.println(matcher1.group(1) + " = " + matcher1.group(2));
}
}
Хорошо работает, когда информация состоит из нескольких строк, за исключением случая, когда она находится в одной длинной строке он не извлекает всю информацию, которую я хочу, и я не знаю, в чем причина ..
Как
{{Cite book|url=https://books.google.es/books?id=HuSQGrRY7F4C|title=Ajax Black Book, New Edition (With Cd)|last=Kogent Solutions Inc|first =|publisher = Dreamtech Press|year=2008|isbn=978-8177228380|location=|pages =40}}
Я хочу извлечь (URL, заголовок, последний, первый, издатель, isbn)
но вывод
BOOK:
url = https://books.google.es/books?id=husqgrry7f4c
----------------------
title = ajax black book, new edition (with cd)
last = kogent solutions inc
Когда ввод Like
{{Cite book
|url=https://books.google.es/books?id=HuSQGrRY7F4C
|title=Ajax Black Book, New Edition (With Cd)
|last=Kogent Solutions Inc
|first =
|publisher = Dreamtech Press
|year=2008
|isbn=978-817722838
|location=
|pages =40}} </ref>
Выход выглядит как
BOOK:
url = https://books.google.es/books?id=husqgrry7f4c
----------------------
title = ajax black book, new edition (with cd)
last = kogent solutions inc
first =
publisher = dreamtech press
isbn = 978-817722838
last = flanagan
first = david
обновление: Я думаю, что есть проблема с шаблоном (регулярное выражение), когда есть Null или нет пробела между =
и |
, когда элемент NULL как first=|
или location=|
и это было в одну строку, я не знаю
2- есть ли способ извлечь (url, title, publisger ..et c), используя RE
Patron вместо .group(1).trim().equals("title")
спасибо