2016-01-14 2 views
1

Как разбить строку на основе каждой буквы верхнего регистра, которую она содержит. Не удалось найти помощь из Интернета.Разделить строку на основе букв верхнего регистра

a<-"MiXeD" 
b<-"ServiceEventId" 

Я хотел бы получить

a<-c("Mi", "Xe", "D") 
b<-c("Service", "Event", "Id") 
+0

Смотрите здесь для некоторых вариантов (комментарии на второй ответ конкретно): http://stackoverflow.com/questions/7988959/splitting-string-based-on-letters-case - странно, как это было ** первым ** результатом поиска Google для 'R Разделить строку на основе верхнего регистра let ters', который по сути является вашим вопросом. Хммм? – thelatemail

+0

См. Http://stackoverflow.com/questions/22528625/how-to-convert-camelcase-to-not-camel-case-in-r –

+0

@thelatemail Возможно, стоит подчеркнуть (хотя я знаю * вы это знаете), что ни один из ответов там не делает то, что просит ОП. (Как вы намекаете, мой комментарий - третий ниже ответа Бена Болкера - делает.) –

ответ

1

Вот один вариант, который использует один 'назад' и один опережения утверждение найти (а затем разделить на) Межсимвольный пространств, которые сразу следуют буквы верхнего регистра. Чтобы узнать, почему необходимы как lookahead, так и утверждение lookbehind (т. Е. Не только утверждение в виде прогноза) see this question and its answers.

+1

Просто для хихикания, вот настройка 'regmatches' -' regmatches (d, gregexpr ("([[: upper:]] | ^) ([^ [: upper:]] + | $)", d)) ' – thelatemail

1

Использование str_extract_all из stringr пакет:

library(stringr) 
str_extract_all(x, "[A-Z][a-z]*") 

или

str_extract_all(x, "[A-Z][a-z]*|[a-z]+") 
+0

Я думаю, что это падает, если строка начинается с нижнего регистра или чего-то еще - например '' thisIsMixed "' – thelatemail

+0

'str_extract_all (x," [A-Z] [a-z] * | [a-z] + ")' –

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