2015-04-06 2 views
2

У меня есть строка символов.Как заменить специальный символ между словами в R

str = c(".wow", "if.", "not.confident", "wonder", "have.difficulty", "shower") 

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

".wow", "if.", "not confident", "wonder", "have difficulty", "shower" 

Во-первых, я попытался

gsub("[\\w.\\w]", " ", str) 
[1] " o "   "if"    "not confident" " onder"   
[5] "have difficulty" "sho er " 

Он дал мне пустое пространство Я хочу, но отрубили все ж х. Затем я пробовал

gsub("\\w\\.\\w", " ", str) 
[1] ".wow"   "if"   "no onfident" "wonder"  
[5] "hav ifficulty" "shower."  

Он сохранил w, но убрал других персонажей прямо до и после «.».

я не могу использовать это либо

gsub("\\.", " ", str) 
[1] " wow"    "if "    "not.confident" "wonder"   
[5] "have.difficulty" "shower" 

, потому что он заберет "" а не между словами.

ответ

2

Попробуйте

gsub('(\\w)\\.(\\w)', '\\1 \\2', str) 
#[1] ".wow"   "if."    "not confident" "wonder"   
#[5] "have difficulty" "shower"  

Или

gsub('(?<=[^.])[.](?=[^.])', ' ', str, perl=TRUE) 

Или, как @rawr предложил

gsub('\\b\\.\\b', ' ', str, perl = TRUE) 
+0

Это сработало! Не могли бы вы рассказать мне, почему я должен добавить круглые скобки? – wen

+0

@wen Это уже объяснено в сообщении hwnd. – akrun

+0

@rawr Спасибо, это лучше. Я думаю, это не сработает без 'perl = TRUE' – akrun

4

Использование capturing groups and back-references:

sub('(\\w)\\.(\\w)', '\\1 \\2', str) 
# [1] ".wow"   "if."    "not confident" "wonder"   
# [5] "have difficulty" "shower" 

Группа захвата может быть создана путем размещения символов для группировки внутри набора круглых скобок (...). Backreferences вспоминают, что соответствовало группе захвата. (\); а затем цифра с указанием номера группы.

Используя lookaround утверждения:

Lookarounds равны нулю ширины утверждения. Они не «потребляют» никаких символов в строке.

sub('(?<=\\w)\\.(?=\\w)', ' ', str, perl = TRUE) 
Смежные вопросы