有什么方法可以用字符串中的单个数字替换数字范围?数字范围可以是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"

07-28 03:59
查看更多