化学式(串)总是以特定的形式写成,化学元素后跟一个数字,例如氧气O 2,二氧化碳CO 2。氯化钠氯化钠
如果一个元素可以用一个字母表示,则该字母为大写字母,例如氧气O
和碳C
。一些元素用2个字母表示,只有第一个字母是大写字母,例如钠Na
。
所以元素用一个或两个字母表示,只有两种情况。
您可以看到,如果元素的数量为1,则不会在其后写入数字1。
我想要做的是在这些元素后面添加1。
我的示例数据是
strings <- c("O2", "CO2", "NaCl")
我想得到的是:
strings_new <- c("O2", "C1O2", "Na1Cl1")
在编程语言中,存在具有特定格式的字符串。大写字母或一个大写字母和一个小写字母跟随一个数字。如果缺少一个字母后面的数字,并且这封字母是大写的,并且后面的字母也是大写字母,则1将在此字母后面插入。如果这封信是大写字母,但背后的字母是小写字母,则在小写字母后面插入1。
非常感谢你的帮助。
您可以使用此正则表达式匹配大写字母(对于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"