如何根据大写或小写在字符串中添加数字?

时间:2019-02-22 17:33:48

标签: r regex string

化学式(字符串)始终以特定格式书写,化学元素后跟一个数字,例如氧气O2,二氧化碳CO2。氯化钠氯化钠

如果一个元素可以用一个字母表示,则该字母为大写字母,例如,氧O和碳C。某些元素以2个字母显示,只有第一个字母是大写字母,例如,钠Na

因此元素用一个或两个字母表示,只有两种情况。

您可以看到,如果元素数为1,则数字1不会写在其后。

我要在这些元素后面添加1。

我的示例数据是

strings <- c("O2", "CO2", "NaCl")

我想要得到的是:

strings_new <- c("O2", "C1O2", "Na1Cl1")

在编程语言中,存在具有特定格式的字符串。一个大写字母或一个大写字母和一个小写字母后跟一个数字。如果缺少字母后面的数字,并且该字母为大写字母,并且后面的字母也为大写字母,则在该字母后面插入1。如果此字母为大写字母,但后面的字母为小写字母,则在小写字母之后插入1。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式,该正则表达式与大写字母(用于C)或大写字母(可选)后跟一个小写字母(支持NaCl)匹配,但不匹配后跟一个数字,这意味着需要在其后附加1

([A-Z][a-z]?)(?!\d)

并用\11

替换

Demo

查看此R代码演示

strings <- c("O2", "CO2", "NaCl")
gsub("([A-Z][a-z]?)(?!\\d)","\\11", strings, perl = TRUE)

打印

[1] "O2"     "C1O2"   "Na1Cl1"