Возможно, вы (?) Делаете это на неправильной стадии анализа
Похоже, что вы пытаетесь провести текстовый анализ ASOIAF и исключить заголовки глав из своего анализано я думаю, что вы пытаетесь сделать это не в том месте анализа.Заголовки глав легко идентифицировать в оригинальном тексте, потому что они всегда находятся вверху страницы, всегда в центре и всегда сопровождаются пробелом.Эти функции позволят вам легко и надежно идентифицировать заголовки, но эта информация была отброшена до того, как вы попытаетесь идентифицировать заголовки.Если вы контролируете этот этап анализа, вам, вероятно, будет проще определить, какие записи являются заголовками на этом этапе.
Для этого вам не нужно регулярное выражение
Несмотря на то, что вы указываете Regex в заголовке вопроса, он не включен в тело вопроса, поэтому я предполагаю, что он вам на самом деле не нужен, а просто закончил поиском решения Regex для проблемы, для которой он необязательно.
Самый простой способ проверки всех заглавных букв - сделать x == toupper(x)
.toupper()
преобразует все буквенные символы в их верхний регистр, затем вы можете проверить, является ли ваша строка прописными, сравнив ее с этой преобразованной версией.
Экранирование строк длиной менее 2 также легко, вы можете сделать это, просто добавив условие nchar(x) >=2
.
Ваше окончательное требование менее тривиально, но вам нужно будет выполнитьименно то условие, которое вам нужно исключить.Я подозреваю, что если вы получаете полные абзацы (?), То лучше всего искать кавычки.В зависимости от диапазона опций, которые должны быть сопоставлены, вам, в конце концов, может понадобиться использовать Regex, но если это всего лишь несколько конкретных отметок, вы можете использовать str_detect
(из пакета stringr
) с опцией fixed()
дляобнаружить его, так как это будет значительно быстрее.
Независимо от того, используете ли вы Regex для этого последнего этапа, я бы включил обнаружение в серию условных выражений в функции, а не выполнял бы один поиск Regex, поскольку это будетбыстрее и, на мой взгляд, концептуально легче понять.