Я очищаю текстовые строки в R. Я хочу удалить все знаки препинания кроме апострофы и дефисы. Это означает, что я не могу использовать класс символов [:punct:]
(если не существует способа сказать [:punct:] but not '-
)., когда [: punct:] is too much
! " # $ % & () * + , ./: ; <=> ? @ [ \ ]^_ { | } ~.
и обратная сторона должна выйти.
Для большей части вышесказанного экранирование не является проблемой. Но для квадратных скобок у меня действительно проблемы. Вот что я пытался:
gsub('[abc]', 'L', 'abcdef') #expected behaviour, shown as sanity check
# [1] "LLLdef"
gsub('[[]]', 'B', 'it[]') #only 1 substitution, ie [] treated as a single character
# [1] "itB"
gsub('[\[\]]', 'B', 'it[]') #single escape, errors as expected
Error: '[' is an unrecognized escape in character string starting "'[["
gsub('[\\[\\]]', 'B', 'it[]') #double escape, single substitution
# [1] "itB"
gsub('[\\]\\[]', 'B', 'it[]') #double escape, reversed order, NO substitution
# [1] "it[]"
Я предпочел бы не использовали fixed=TRUE
с gsub
так, что помешает мне использовать класс символов. Итак, как включить квадратные скобки в класс символов регулярных выражений?
ETA дополнительные испытания:
gsub('[[\\]]', 'B', 'it[]') #double escape on closing ] only, single substitution
# [1] "itB"
gsub('[[\]]', 'B', 'it[]') #single escape on closing ] only, expected error
Error: ']' is an unrecognized escape in character string starting "'[[]"
ETA: единственная замена была вызвана не устанавливая perl=T
в моих gsub
вызовов. то есть:
gsub('[[\\]]', 'B', 'it[]', perl=T)
И использовать это в R, вы бы выполнили 'gsub (" (?! ['-]) [[: punct:]] "," ", x, perl = TRUE)' где 'x <-"' -! # $% &() * +,./:; <=>? @ []^_ {|} ~ \\ "', например. –
@ JoshO'Brien, спасибо за пример R. – stema
Уход! И когда я вспомнил о включении 'perl = T' в мой вызов' gsub', он работал отлично. – dnagirl