【发布时间】:2017-07-29 06:46:29
【问题描述】:
我需要一个正则表达式,它返回一个特定的字母和后面的(一个或两个)数字,直到下一个字母。 例如,我想使用 R 中的正则表达式提取公式中有多少碳(C)
strings <- c("C16H4ClNO2", "CH8O", "F2Ni")
我需要一个表达式来返回 C 的个数,它可以是一位或两位数,并且不返回氯 (Cl) 之后的数字。
substr(strings,regexpr("C[0-9]+",strings) + 1, regexpr("[ABDEFGHIJKLMNOPQRSTUVWXYZ]+",strings) -1)
[1] "16" "C" ""
但我想要返回的答案是
"16","1","0"
此外,我希望正则表达式自动定位下一个字母并在它之前停止,而不是有一个我指定为字母而不是 C 的最终位置。
【问题讨论】:
-
是正则表达式要求吗?有更简单的解决方案,但它们的适用性取决于您的实际问题。最简单的是在记事本++中打开该文本,打开搜索窗口类型 C 并单击计数 - 如果确实需要,您可以在那里设置更多规则甚至使用正则表达式;对于软件类型应用程序,我会使用 python,读取 var 中的所有文本并在 var 中查找内容
-
对不起 - 问题可能被误解了
-
您可以检查 regex101.com 并在那里进行测试,但作为建议,您可以使用 [AZ] 或 [a-zA-Z] 而不是整个字母表,如果包含的小写字母也是 \d 所以C\d+ 会找到你需要的一切
-
你可以做
sub("C(\\d+).*", "\\1", sub("C([^0-9]+)", "C1\\1", ifelse(!grepl("C", strings), paste0("C0", strings), strings))) #[1] "16" "1" "0" -
谢谢,德拉科。我没有使用整个字母表:例如,我不想使用 C - 我如何排除 C?我想在 R 中使用正则表达式。我的真实数据集是两个合并的数据框,其中包含化学化合物,我想从它们的公式中计算某些元素。