Вставлять символы, когда строка меняет свой регистр R

#r #regex #string

#r #регулярное выражение #строка

Вопрос:

Я хотел бы вставлять символы в тех местах, где строка меняет свой регистр. Я попытался вставить ‘ n’ после фиксированного количества символов, а затем ‘ ‘, поскольку я не понимаю, как определить изменение регистра

 s <-c("FloridaIslandE7", "FloridaIslandE9", "Meta")
gsub('^(.{7})(.{6})(.*)$', '\1\n\2 \3', s )

[1] "FloridanIsland E7" "FloridanIsland E9" "Meta"     
  

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

Ответ №1:

Конечно, для этого есть менее запутанный regex способ, но вы могли бы попробовать:

 gsub('([A-Z][0-9])', ' \1', gsub('([a-z])([A-Z])', '\1n\2', s))
  

Вывод:

 [1] "FloridanIsland E7" "FloridanIsland E9" "Meta"    
  

Ответ №2:

Вот вариант

 str_replace_all(s, "(?<=[a-z])(?=[A-Z])", "n")
#[1] "FloridanIslandnE7" "FloridanIslandnE9" "Meta" 
  

Ответ №3:

Если вы действительно хотите вставить n , попробуйте это:

 gsub("([a-z])([A-Z])", "\1\n\2", s)
[1] "FloridanIslandnE7" "FloridanIslandnE9" "Meta"