R 如何替换字符串中的内部大写字母
我有一系列字符串,如下所示:R 如何替换字符串中的内部大写字母,r,regex,text-mining,R,Regex,Text Mining,我有一系列字符串,如下所示: vec<-c("Peronospora boniNhenrici","Cystoseira abiesNmarina","Niplommatina rubra", "Padina sanctaeNcrucis","Nachygrapsus NaurusNliguricus","Melphidippa borealis") 有什么建议吗?我使用以下方法获得了位置: stri_locate_all(vec,regex = "[N]") 但我不确定如果是内部的
vec<-c("Peronospora boniNhenrici","Cystoseira abiesNmarina","Niplommatina rubra",
"Padina sanctaeNcrucis","Nachygrapsus NaurusNliguricus","Melphidippa borealis")
有什么建议吗?我使用以下方法获得了位置:
stri_locate_all(vec,regex = "[N]")
但我不确定如果是内部的,如何替换“N”。当我尝试使用gsub替换大写字母“N”时,它会替换所有出现的N,而不仅仅是内部的“N”。我们可以查找被
\w
包围的任何N,在正则表达式中,它与任何字母数字字符或下划线匹配。如果太宽,您可以将\w
替换为[a-zA-Z]
以仅匹配字母:
stringr::str_replace_all(vec, "(\\w)N(\\w)", "\\1-\\2")
我们可以用“查找后面”代替“代码”>“n”/“代码”,在单词的中间用“代码>”-“<代码> < /p>
gsub((?我们可以对捕获组使用gsub
)
gsub("([a-z])N([a-z])", "\\1-\\2", vec)
#[1] "Peronospora boni-henrici" "Cystoseira abies-marina" "Niplommatina rubra"
#[4] "Padina sanctae-crucis"
#[5] "Nachygrapsus Naurus-liguricus" "Melphidippa borealis"
如果您的正则表达式风格支持\B
non(使用gsub
with)
并替换为-
。请参阅
gsub("(?<!^)\\wN", "-", vec, perl = TRUE)
#[1] "Peronospora bon-henrici" "Cystoseira abie-marina" "Niplommatina rubra"
#[4] "Padina sancta-crucis" "Nachygrapsus Nauru-liguricus" "Melphidippa borealis"
gsub("([a-z])N([a-z])", "\\1-\\2", vec)
#[1] "Peronospora boni-henrici" "Cystoseira abies-marina" "Niplommatina rubra"
#[4] "Padina sanctae-crucis"
#[5] "Nachygrapsus Naurus-liguricus" "Melphidippa borealis"
\BN\B