化学式(字符串)始终以特定格式书写,化学元素后跟一个数字,例如氧气O2,二氧化碳CO2。氯化钠氯化钠
如果一个元素可以用一个字母表示,则该字母为大写字母,例如,氧O
和碳C
。某些元素以2个字母显示,只有第一个字母是大写字母,例如,钠Na
。
因此元素用一个或两个字母表示,只有两种情况。
您可以看到,如果元素数为1,则数字1不会写在其后。
我要在这些元素后面添加1。
我的示例数据是
strings <- c("O2", "CO2", "NaCl")
我想要得到的是:
strings_new <- c("O2", "C1O2", "Na1Cl1")
在编程语言中,存在具有特定格式的字符串。一个大写字母或一个大写字母和一个小写字母后跟一个数字。如果缺少字母后面的数字,并且该字母为大写字母,并且后面的字母也为大写字母,则在该字母后面插入1。如果此字母为大写字母,但后面的字母为小写字母,则在小写字母之后插入1。
非常感谢您的帮助。
答案 0 :(得分:3)
您可以使用此正则表达式,该正则表达式与大写字母(用于C
)或大写字母(可选)后跟一个小写字母(支持Na
或Cl
)匹配,但不匹配后跟一个数字,这意味着需要在其后附加1
([A-Z][a-z]?)(?!\d)
并用\11
查看此R代码演示
strings <- c("O2", "CO2", "NaCl")
gsub("([A-Z][a-z]?)(?!\\d)","\\11", strings, perl = TRUE)
打印
[1] "O2" "C1O2" "Na1Cl1"