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)

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"
Другие вопросы по тегам