В идеале все мои данные должны выглядеть так:
William Faulkner - 'Light In August'
William Faulkner - 'Sanctuary'
William Faulkner - 'The Sound and the Fury'
В этом случае это регулярное выражение будет работать нормально:
Pattern pattern = Pattern.compile("^\\s*(.*)\\s+-\\s+'(.*)'\\s*$");
Matcher matcher = pattern.matcher("William Faulkner - 'Light In August'");
if (matcher.matches()) {
String author = matcher.group(1).trim();
String bookTitle = matcher.group(2).trim();
System.out.println(author + " / " + bookTitle);
}
else {
System.out.println("No match!");
}
Но иногда мои данные содержат примеры, подобные этим, которые, кажется, не соответствуют приведенной выше схеме:
Saki - 'Esme'
Saki - 'The Unrest Cure' (Second Edition)
Saki (File Under: Hector Hugh Munro) - 'The Interlopers' (Anniversary Multi-pack)
William Faulkner - 'The Sound and the Fury' (Collector's Re-issue)
'The Sound and the Fury'
The Sound and the Fury
The Bible (St James Version)
Во всех случаях, когда дефис не существует, это названия книг без авторов. Я не обнаружил ни одного случая, когда имя автора появлялось без названия книги.
Как я могу изменить свое регулярное выражение, чтобы справиться с этим правильно?