Я пытаюсь взять текстовый файл полного собрания сочинений Шекспира и разделить его на каждое произведение. Я уже создал список всех произведений, отформатированных в тексте, и создал регулярное выражение, которое находит любое из названий.
(?:THE SONNETS|ALL’S WELL THAT ENDS WELL)
И так далее, включая все произведения Шекспира, которые есть в текст.
Регулярное выражение работает по назначению - оно извлекает из текста все строки, содержащие один из заголовков. НО есть проблема: в некоторых случаях (особенно Cymbeline и King John) имя главного персонажа в начале их строк в точности совпадает с названием пьесы. Итак, я могу решить эту проблему, используя каждую работу только один раз.
Есть ли способ написать регулярное выражение для поиска заголовков, а затем, когда оно найдет указанный c заголовок, вытащить его возможностей? Или мне придется сделать что-то более сложное, чем регулярное выражение?
Если это поможет, я специально использую R
, и я знаю приличную сумму об использовании rebus
для создания регулярных выражений.
TL; DR: я хочу, чтобы регулярное выражение находило первое вхождение каждой строки в списке в более крупном текстовом документе. Могу ли я сделать это с одним регулярным выражением, или мне нужно будет сгенерировать несколько регулярных выражений или выполнить итерацию?
Примеры здесь:
Пример текстового файла:
THE SONNETS
sonnet text
sonnet text
ALL'S WELL THAT ENDS WELL
play text
CHARACTER: line line
CHARACTER: line line
KING JOHN
play text
CHARACTER: line line
KING JOHN: line line
CHARACTER: line line
AS YOU LIKE IT
play text
CHARACTER: line line
Что я хотел бы иметь возможность сделать это
library(stringr)
text <- readLines("sample-text.txt") # contains above sample text
split_indices <- stringr::str_which(text, REGEX-THAT-I-NEED)
И тогда text[split_indices]
должен возвращать вектор символов, например c("THE SONNETS", "ALL'S WELL THAT ENDS WELL", "KING JOHN", "AS YOU LIKE IT")
вместо c("THE SONNETS", "ALL'S WELL THAT ENDS WELL", "KING JOHN", "KING JOHN", "AS YOU LIKE IT")
, который вернет мое текущее регулярное выражение.