有什么方法可以用字符串中的单个数字替换数字范围?数字范围可以是n-n,最可能是1-15,也可以是4-10。
范围可以用a)表示-
a <- "I would like to buy 1-3 cats"
或带有单词b),例如:to,bis,jusqu'à
b <- "I would like to buy 1 jusqu'à 3 cats"
结果应该看起来像
"I would like to buy 1,2,3 cats"
我发现了这一点:Replace range of numbers with certain number,但不能真正在R中使用它。
最佳答案
gsubfn软件包中的gsubfn
类似于gsub
,但是它不是用替换字符串替换匹配项,而是允许用户指定一个函数(可能使用公式表示法,如此处所示)。然后,它将匹配项传递给正则表达式中的捕获组,即,将匹配项作为正则表达式的括号部分,作为单独的参数,并将整个匹配项替换为函数的输出。因此,我们匹配"(\\d+)(-| to | bis | jusqu'à )(\\d+)"
导致三个捕获组,因此该函数有3个参数。在函数中,我们将seq
与其中的第一个和第三个一起使用。请注意,seq
可以接受字符参数并将其解释为数字,因此我们不必将参数转换为数字。
因此,我们得到了这种单线:
library(gsubfn)
s <- c(a, b) # test input strings
gsubfn("(\\d+)(-| to | bis | jusqu'à )(\\d+)", ~ paste(seq(..1, ..3), collapse = ","), s)
给予:
[1] "I would like to buy 1,2,3 cats" "I would like to buy 1,2,3 cats"