从字符串中的固定位置提取天数

时间:2019-05-25 10:23:19

标签: r split

我想从固定位置on day提取字符串中存在的天数到列表中,而不考虑单词every之后的数字。有想法吗?

strg1 <- 'At 08:00 AM, on day 4 of the month, every 12 months'
strg2 <- 'At 08:00 AM, on day 4,20,2 of the month, every 12 months'

期望结果在列表中,例如:对于strg1 4strg2 4 20 2

3 个答案:

答案 0 :(得分:2)

您可以使用此代码段

function   accelerate(){
var initial, accelerated;

var initialAD = d3.line()
.x(function(d,i){return xScale(ADX[i])})
.y(function(d,i){return yScale(initialADMoveY[i])})

 //create the initial path
 var initial = initialAD(ADX);

 var acceleratedAD = d3.line()
.x(function(d,i){return xScale(ADX[i])})
.y(function(d,i){return yScale(acceleratedADY[i])})

 //create accelerated
var accelerated = acceleratedAD(ADX);

g.append("path").attr("class","first").attr("d",ADPath)
.attr("stroke-width",3)
.attr("stroke","green")
.transition()
.duration(2000)
.attrTween("d" ,function(){
  return d3.interpolateString(ADPath,initial)
 }).on("end",secondTransition)


function secondTransition(){
g.append("path").attr("class","second").attr("d",initial)
.attr("stroke-width",3)
.attr("stroke","green")
.transition()
.duration(2000)
.attrTween('d', function (d) {
 return d3.interpolateString(initial, accelerated);
});
}

答案 1 :(得分:0)

使用基数R,我们可以首先在字符串的"day""of"之间找到文本,然后获取该文本中的所有数字,而不必考虑它们之间的任何分隔符。

get_numbers <- function(string) {
    a1 <- trimws(sub(".*day(.*)of.*", "\\1", string))
    as.numeric(strsplit(gsub("[^0-9]", " ", a1), "\\s+")[[1]])
}

get_numbers(strg1)
#[1] 4

get_numbers(strg2)
#[1]  4 20  2

get_numbers("At 08:00 AM, day 4,20 and till 2 of 36")
#[1]  4 20  2

答案 2 :(得分:0)

我们可以使用tidyverse创建一个函数并提取数字

library(tidyverse)
library(magrittr)
getNumbers <- function(vec) {
 as.numeric(str_extract_all(str_extract_all(vec,
       "(?<=day )((\\d+),?){1,}")[[1]], "\\d+")[[1]])

  }

getNumbers(strg2)
#[1]  4 20  2
getNumbers(strg1)
#[1] 4