一位用户问我如何在How to italicize select words in a ggplot legend?中做到这一点,我对我的变通方法不满意.
其目的是在除给定字符串之外的所有字符向量元素周围添加括号*.让我们假设在这个例子中,这些总是在开头找到的.我对第一组使用可选捕获,然后使用星号包括第二组.当搜索的单词单独存在并且没有后续字符串时,就会出现问题.
我已经在代码中包含了所需的输出和一些try .
v <- head(rownames(mtcars))
## does also not work with (.*)?, nor with (.+) nor (.+)?
gsub("(Hornet |Valiant)?(.*)", "\\1\\*\\2\\*", v)
#> [1] "*Mazda RX4*" "*Mazda RX4 Wag*" "*Datsun 710*"
#> [4] "Hornet *4 Drive*" "Hornet *Sportabout*" "Valiant**"
## desired output
ifelse(grepl("Valiant", v), v, gsub("(Hornet )?(.*)", "\\1\\*\\2\\*", v) )
#> [1] "*Mazda RX4*" "*Mazda RX4 Wag*" "*Datsun 710*"
#> [4] "Hornet *4 Drive*" "Hornet *Sportabout*" "Valiant"