【发布时间】:2021-10-26 02:32:53
【问题描述】:
根据我之前在这里提出的问题提出一个新问题:我有如下化合物列表:
Ag0.05Zr1.0
Al0.11W1.0
Al0.18Cr1.0
AlFe
AlFe0.2NiCuCoCr
AlFe0.2NiCuCoCz
AlFeNi
AlFeNiCo
AlFeNiCrCo
AlFeNiCrCoCu0.2
AlFeNiCu0.2CoCr
Cr1.0Mo0.33
U0.33Zr1.0
V0.33W1.0
V1.0W1.0
我需要在元素名称之间拆分并放置一个下划线。现在元素名称可以是单个大写字母,或 1 个大写字母后跟一个小写字母。到目前为止,我已经在包含 2 个字母的字符串之间放置了一个“_”。但是,每当涉及单个字母元素时,它都会给出以下内容:
“输入的化合物 Co_1.0_Cu_1.0_Fe_1.0_5_Nb_0.5_6_Ni_1.0 中的元素 V1.0 不存在!”。 (代码生成的错误消息)但是我希望它是以下内容:
“V_1.0_Co_1.0_Cu_1.0_Fe_1.05_Nb_0.56_Ni_1.0”
因此,它不仅将单个字母与数字组合在一起,而且还无法识别所有组合在一起的数字。有人可以帮忙吗?我使用以下代码来实现这一点:
elem = gsub("(?<=[a-z0-9])(?=[0-9A-Z])", "_", elem, perl = TRUE)
其中 elem 是我的化合物列表。
数字基本上是元素分数,所以错误信息应该是这样的:
错误:元素“Cz”(或“Z”是元素周期表中不存在的单个字母元素),“在输入的复合 xyz 中不存在!
【问题讨论】:
-
请不要将数据添加为图像。我们无法从图像中复制数据。如果您在 reproducible format 中提供数据,则更容易提供帮助
-
这就够了吗?我已经更新了帖子。我需要帮助来寻找解决方案。任何想法和帮助将不胜感激。
-
我会尝试在几个
gsub步骤中执行此操作,每次都覆盖elem。尝试提出单个正则表达式可能是可能的,但代价是复杂。