首页 > 解决方案 > 如何使用正则表达式逐行提取字符串?

问题描述

我在数据框中有一列filename,如下所示:

/testData/THQ/TAIRATE.20030314.190000.tif
/testData/THQ/TAIRATE.20030314.200000.tif
/testData/THQ/TAIRATE.20030314.210000.tif
/testData/THQ/TAIRATE.20030314.220000.tif

我想从中提取时间戳并将其存储为另一列。但我不熟悉正则表达式。到目前为止,我已经做到了:

tdat %>%
  dplyr::rowwise() %>% 
  dplyr::mutate(timestamp = str_extract(as.character(filename), "[^//TAIRATE]+$")) %>% 
  glimpse()

结果

.20030314.190000.tif
.20030314.200000.tif
.20030314.210000.tif
.20030314.220000.tif

预期结果

20030314190000
20030314200000
20030314210000
20030314220000

问题:如何编写正确的正则表达式或有更好的方法?

标签: rregexdplyr

解决方案


str_extract和其他此类函数是矢量化的,您不需要逐行。

在这种情况下,您可以在基础 R 中使用sub.

sub('.*TAIRATE\\.(\\d+)\\.(\\d+).*', '\\1\\2', df$filename)
#[1] "20030314190000" "20030314200000" "20030314210000" "20030314220000"

推荐阅读