gsub, содержимое в квадратных скобках, иногда связываемое новой строкой вместо закрывающей скобки
Я пытаюсь очистить некоторые текстовые строки, чтобы я мог аккуратно разобрать некоторую информацию скрипта. Для этих таблиц информация в скобках представляет либо местоположение, либо примечания о блокировке для скрипта.
Я хотел бы взять всю информацию в квадратных скобках и удалить квадратные скобки и все содержащие их символы. Главное в работах заключается в том, что, поскольку все данные изначально были написаны вручную, не вся информация или примечания в квадратных скобках фактически имеют закрывающую скобку. Итак - я хотел бы определить:
- [
- любой символ, кроме закрывающей скобки, 0 или более раз
- ЛИБО закрывающая скобка или индикатор новой строки \n
Пример данных, одна очень длинная строка (аббревиатура моя). Обычно каждая строка будет сценарием всего эпизода:
"[Bridge]\r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n [Pike's Quarters \r\r\n BOYCE: Boyce here.\r\r\n"
Я пробовал несколько перестановок gsub, в основном по этим направлениям:
df$script <- gsub("\\[[^\\]]*[\\]|\\n]", " ", testdf$script)
Который я считаю, должен схватить:
\\[ an open bracket
[^\\]]* any character except for a closed bracket, 0 or more times
[\\]|\\n] either a closed bracket, or a new line metachar
но я прихожу пустой каждый раз. Я пробовал другие варианты в этой строке gsub, так как мое регулярное выражение - то, что сдерживает меня. Все они были предприняты без изменений в моей строке:
df$script <- gsub("\\[[^\\]]*[\\]\\n]", " ", testdf$script)
df$script <- gsub("\\[[^\\]]*[\\]|\\n]", " ", testdf$script)
df$script <- gsub("\\[[^\\]]*[\\](\\n)]", " ", testdf$script)
df$script <- gsub("\\[[^\\]]*[\\]|(\\n)]", " ", testdf$script)
Я знаю, что регулярное выражение соскобленного HTML, вероятно, заставит меня сморкаться; к сожалению, это единственный инструмент, который мне нужен для решения этой проблемы. Я имел различные степени успеха с некоторыми другими симуляторами языковых регулярных выражений, но есть кое-что в R gsub, которого нет в том, как я пытаюсь обработать метасимволы. Любые советы будут высоко ценится.
1 ответ
You may use the following PCRE regex (with perl=TRUE
argument passed to gsub
)
\[[^]\r\n]*(?:]|\R)
Смотрите демо-версию регулярного выражения.
Детали шаблона
\[
- а[
голец[^]\r\n]*
- 0+ символов кроме]
, CR and LF(?:]|\R)
- либо]
(]
) или же (|
) line break sequence (\R
)
x <- "[Bridge]\r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n [Pike's Quarters \r\r\n BOYCE: Boyce here.\r\r\n"
x <- gsub("\\[[^]\r\n]*(?:]|\\R)", " ", x, perl=TRUE)
x
## => [1] " \r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n \r\n BOYCE: Boyce here.\r\r\n"