用字符串中的单个数字替换数字范围

cap*_*oma 3 text replace r tm tidytext

有没有办法用字符串中的单个数字替换数字范围?数字的范围可以从nn,最可能在1-15左右,也可能是4-10.

范围可以用a)表示 -

a <- "I would like to buy 1-3 cats"
Run Code Online (Sandbox Code Playgroud)

或者用词b)例如:to,bis,jusqu'à

b <- "I would like to buy 1 jusqu'à 3 cats"
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的

"I would like to buy 1,2,3 cats"
Run Code Online (Sandbox Code Playgroud)

我发现这个:用一定数量替换数字范围,但在R中无法真正使用它.

G. *_*eck 6

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)
Run Code Online (Sandbox Code Playgroud)

赠送:

[1] "I would like to buy 1,2,3 cats" "I would like to buy 1,2,3 cats"
Run Code Online (Sandbox Code Playgroud)