r - 在 R 中使用 gsub 在子字符串周围插入点

标签 r gsub string-substitution

我想在 R 中有一个函数,它可以在给定的子字符串(例如“alpha”)周围插入点(“.”),如果它们不存在的话。例如。 string="10-alpha-epoxy-Amorph-4-ene" 应该返回

"10-.alpha.-epoxy-Amorph-4-ene"

string="alpha-cadolene" 应该返回

".alpha.-cadolene"

但是 string=".alpha.-cadolene" 应该返回

".alpha.-cadolene"

(子串可以出现多次)

在 R 中使用 gsub 最简单的方法是什么?

干杯,汤姆

最佳答案

我会做这样的事情:

gsub("[.]?(alpha)[.]?", ".\\1.", c("10-alpha-epoxy-Amorph-4-ene",
                               ".alpha.-cadolene", "alpha.-cadolene",
                                ".alpha-cadolene"                              
                                 ))
[1] "10-.alpha.-epoxy-Amorph-4-ene" ".alpha.-cadolene"             
    ".alpha.-cadolene"              ".alpha.-cadolene"  

编辑对许多术语的概括:

如果您有一个术语列表,您可以使用 paste 创建游览正则表达式:

terms <- c('alpha','gamma','beta','delta')

gsub(paste0("[.]?(",paste0(terms,collapse='|'),")[.]?"), ".\\1.", 
                c("10-alpha-epoxy-Amorph-4-ene",
                 ".gamma.-cadolene", "beta.-cadolene",
                 ".delta-cadolene")) 

[1] "10-.alpha.-epoxy-Amorph-4-ene" ".gamma.-cadolene"             
    ".beta.-cadolene"              
[4] ".delta.-cadolene"  

EDIT 获取全字母的 greels 列表:

library(XML)
dat <- readHTMLTable("http://en.wikipedia.org/wiki/Greek_alphabet",
                     strinsAsFactors=FALSE)[[2]]

terms <- as.character(dat$V2[-c(1,2)])
 [1] "alpha"   "beta"    "gamma"   "delta"   "epsilon" "zeta"    "eta"     "theta"   "iota"    "kappa"   "lambda" 
[12] "mu"      "Name"    "Modern"  "nu"      "xi"      "omicron" "pi"      "rho"     "sigma"   "tau"     "upsilon"
[23] "phi"     "chi"     "psi"     "omega"  

关于r - 在 R 中使用 gsub 在子字符串周围插入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20925591/

相关文章:

r - 在多个数处分割向量

r - 有条件地复制数据框中的行

r - 为什么空逻辑向量通过 stopifnot() 检查?

删除向量的每个元素中第 2 次出现 "-"之后的所有字符

r - group_by 并创建一系列每月日期

ruby - 为什么在 Ruby 中使用 "gsub"不删除管道?

r - 使用R如何根据字符分隔字符串

Python正则表达式删除模式匹配中的空格

Python %s 替换一直有效,直到我连接字符串 - 我做错了什么?

正则表达式仅用于替换括号外的特定字符