2016-11-27 2 views
2

Я пытаюсь добавить круглые скобки вокруг некоторых символов символов символов, и я хочу, чтобы иметь возможность вставить с помощью функции paste0. Я хочу взять эту строку:манипулирование текстом в R

a <- c("I Like What I Know 1959 02e pdfDrama (amazon.com)", "My Liffe 1993 07e pdfDrama (amazon.com)") 

обертка определенные строки в скобках:

a 
[1] “I Like What I Know (1959) (02e) (pdfDrama) (amazon.com)” 
[2] ”My Life (1993) (07e) (pdfDrama) (amazon.com)” 

Я пытался, но не могу понять способ их заменить в строке:

paste0("(",str_extract(a, "\\d{4}"),")") 
paste0("(",str_extract(a, ”[0-9]+.e”),”)”) 

Помощь?

+1

Какое правило? Найдите 4-значное слово и заверните все последующие слова в круглые скобки? –

ответ

1

Я могу предложить регулярное выражение для фиксированного числа слов определенного типа:

a <- c("I Like What I Know 1959 02e pdfDrama (amazon.com)","My Life 1993 07e pdfDrama (amazon.com)") 
sub("\\b(\\d{4})(\\s+)(\\d+e)(\\s+)([a-zA-Z]+)(\\s+\\([^()]*\\))", "(\\1)\\2(\\3)\\4(\\5)\\6", a) 

Смотрите R demo

А вот regex demo. Короче говоря,

  • \\b(\\d{4}) - захватывает 4 цифры как целое слово в группу 1
  • (\\s+) - Группа 2: один или несколько пробельные
  • (\\d+e) - Группа 3: один или более цифр и e
  • (\\s+) - Группа 4: там же
  • ([a-zA-Z]+) - Группа 5: один или несколько букв
  • (\\s+\\([^()]*\\)) - Группа 6: один или больше пробелов, (, ноль или более символов, кроме ( и ), ).

Содержимое групп вставляется обратно в результат с помощью обратных ссылок.

Если есть больше слов, и вы должны обернуть слова, начинающиеся с буквы/цифры/подчеркивания после 4-значного слова в строке, используйте

gsub("(?:(?=\\b\\d{4}\\b)|\\G(?!\\A))\\s*\\K\\b(\\S+)", "(\\1)", a, perl=TRUE) 

См R demo и regex demo

Деталь:

  • (?:(?=\\b\\d{4}\\b)|\\G(?!\\A)) - либо место перед 4-значным целым вр d (см положительный предпросмотр (?=\\b\\d{4}\\b)) или конец предыдущего успешного матча
  • \\s* - 0+ пробельные символы
  • \\K - Опуская текст, совпадающий до сих пор
  • \\b(\\S+) - Группа 1 захвата 1 или более непробельных символов которым предшествует граница слова.
Смежные вопросы