r:如何在特定模式中插入值
我试图在一系列值中添加一个特殊字符。但我不知道怎么做 以下是原始输入:r:如何在特定模式中插入值,r,regex,R,Regex,我试图在一系列值中添加一个特殊字符。但我不知道怎么做 以下是原始输入: chemical <- "200mL of Ac2O3, 3.5mml of AgBF4, 10.0ml of AgBr, 100ml of AgCl3Cu2" 基本上,只要原始数据中的化学式中有数字,我就会在前后加上一个“~” 我试着使用gsub,但我不确定我应该如何告诉R,在化学式中找到这些数字,然后插入 有人对此有想法吗?谢谢大家! gsub((?一个选项是strsplit在space上,然后用~\\1~替换以
chemical <- "200mL of Ac2O3, 3.5mml of AgBF4, 10.0ml of AgBr, 100ml of AgCl3Cu2"
基本上,只要原始数据中的化学式中有数字,我就会在前后加上一个“~”
我试着使用gsub,但我不确定我应该如何告诉R,在化学式中找到这些数字,然后插入
有人对此有想法吗?谢谢大家!
gsub((?一个选项是strsplit
在space
上,然后用~\\1~
替换以字符开头的单词中的数字
:
gsub("(?<=[A-Za-z])([0-9])","~\\1~",chemical,perl = T)
[1] "200mL of Ac~2~O~3~, 3.5mml of AgBF~4~, 10.0ml of AgBr, 100ml of AgCl~3~Cu~2~"
chemical <- "200mL of Ac2O3, 3.5mml of AgBF4, 10.0ml of AgBr, 100ml of AgCl3Cu2"
a <- strsplit(chemical, split = " ")[[1]]
paste0(ifelse(grepl("^[a-zA-Z].*", a),gsub("(\\d)","~\\1~", a),a),collapse = " ")
#[1] "200mL of Ac~2~O~3~, 3.5mml of AgBF~4~, 10.0ml of AgBr, 100ml of AgCl~3~Cu~2~"
chemical类似于@denis answer,但不使用perl语法:
gsub(([A-Za-z])([0-9]+),“\\1~\\2~”,化学品)
(根据@Wiktor correct comment更正)这成功了。它是否会从更复杂的案例中产生可能是一个问题:
gsub("([^ [:digit:].])([[:digit:]])", "\\1~\\2~", chemical)
#[1] "200mL of Ac~2~O~3~, 3.5mml of AgBF~4~, 10.0ml of AgBr, 100ml of AgCl~3~Cu~2~"
逻辑是匹配一对{非数字、非空格、非小数点}字符,后跟一个数字,并在数字的两侧放置一个平铺。如果“数字”的大小可能超过9,则您希望在数字之后放置一个量化的“[[:digit:]{1,30}”“也许吧。这是一种复杂的积极回顾方式,但它是clever@denis我知道。你很快就提供了正向查找的解决方案。因此我不得不更改我的解决方案。你得到了一个明智的答案。更安全的方法可能是[A-Za-z]
,尽管[:alpha::::
可能有一些特定于语言环境的扩展。
gsub("([^ [:digit:].])([[:digit:]])", "\\1~\\2~", chemical)
#[1] "200mL of Ac~2~O~3~, 3.5mml of AgBF~4~, 10.0ml of AgBr, 100ml of AgCl~3~Cu~2~"