Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r:如何在特定模式中插入值_R_Regex - Fatal编程技术网

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~"