如何替换字符串中的内部大写字母
How to replace an internal capital letter in a string
我的字符串范围如下:
vec<-c("Peronospora boniNhenrici","Cystoseira abiesNmarina","Niplommatina rubra",
"Padina sanctaeNcrucis","Nachygrapsus NaurusNliguricus","Melphidippa borealis")
我想把每个元素的第二个单词中的内部大写 "N" 替换为“-”,这样它就像:
("Peronospora boni-henrici","Cystoseira abies-marina","Niplommatina rubra",
"Padina sanctae-crucis,"Nachygrapsus Naurus-liguricus","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")
我们可以用look behind把单词中间的"N"
换成"-"
gsub("(?<!^)\wN", "-", vec, perl = TRUE)
#[1] "Peronospora bon-henrici" "Cystoseira abie-marina" "Niplommatina rubra"
#[4] "Padina sancta-crucis" "Nachygrapsus Nauru-liguricus" "Melphidippa borealis"
我们可以将 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
非 word boundaries (use gsub
with perl=TRUE
)
\BN\B
并替换为-
。参见 this demo at Regex101。
我的字符串范围如下:
vec<-c("Peronospora boniNhenrici","Cystoseira abiesNmarina","Niplommatina rubra",
"Padina sanctaeNcrucis","Nachygrapsus NaurusNliguricus","Melphidippa borealis")
我想把每个元素的第二个单词中的内部大写 "N" 替换为“-”,这样它就像:
("Peronospora boni-henrici","Cystoseira abies-marina","Niplommatina rubra",
"Padina sanctae-crucis,"Nachygrapsus Naurus-liguricus","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")
我们可以用look behind把单词中间的"N"
换成"-"
gsub("(?<!^)\wN", "-", vec, perl = TRUE)
#[1] "Peronospora bon-henrici" "Cystoseira abie-marina" "Niplommatina rubra"
#[4] "Padina sancta-crucis" "Nachygrapsus Nauru-liguricus" "Melphidippa borealis"
我们可以将 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
非 word boundaries (use gsub
with perl=TRUE
)
\BN\B
并替换为-
。参见 this demo at Regex101。