2016-02-17 2 views
1

Я отчаянно пытаюсь вставить пробелы между группами захвата. Мой наивный подход былR: gsub вставляет пробелы между группами захвата

c = c("WesternSaharaRegion", "ColumbiaState", "OneTwoThreeFourFiveSix") 
gsub("(.+[a-z])([A-Z].+)","\\1 \\2", clist, perl=T) 

который вставляет только пробелы между двумя последними заглавными буквами. Использование

gsub("(?=([a-z][A-Z]))"," ", c, perl = T) 

работает не совсем точно для него это один-символьных смещенной версии

"Wester nSahar aRegion"  "Columbi aState"    "On eTw oThre eFou rFiv eSix" 

Как я смог элегантно получить

"Western Sahara Region"  "Columbia State"    "One Two Three Four Five Six" 

strsplit(), к сожалению, Безразлично» t сохранить группу захвата:/

ответ

2

Мы можем извлечь выгоду Использование регулярных выражений г lookarounds

gsub('(?<=[a-z])(?=[A-Z])', ' ', c, perl=TRUE) 
#[1] "Western Sahara Region"  "Columbia State"    "One Two Three Four Five Six" 

Или использовать захват группы

gsub('([a-z])([A-Z])', '\\1 \\2', c) 
#[1] "Western Sahara Region"  "Columbia State"    "One Two Three Four Five Six" 
+1

Очевидное и элегантный, спасибо большое! –

+0

Jep, сделано. Ваш ответ помог мне, наконец, окунуться в «взгляды», спасибо. –

+0

@ A.Neumann Рад узнать, что это вам помогло. – akrun

Смежные вопросы