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