R 如何使用正则表达式按行提取字符串?
我在数据框中有一列R 如何使用正则表达式按行提取字符串?,r,regex,dplyr,R,Regex,Dplyr,我在数据框中有一列文件名,如下所示: /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 %>% dpl
文件名
,如下所示:
/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()
结果
预期结果
问题:如何编写正确的正则表达式,或者有更好的方法吗?str\u extract和其他此类函数都是矢量化的,您不需要按行操作 在这种情况下,可以使用
sub
在基本R中执行此操作
sub('.*TAIRATE\\.(\\d+)\\.(\\d+).*', '\\1\\2', df$filename)
#[1] "20030314190000" "20030314200000" "20030314210000" "20030314220000"
str_extract
和其他类似的函数是矢量化的,您不需要按行执行
在这种情况下,可以使用sub
在基本R中执行此操作
sub('.*TAIRATE\\.(\\d+)\\.(\\d+).*', '\\1\\2', df$filename)
#[1] "20030314190000" "20030314200000" "20030314210000" "20030314220000"
当然没有@akrun的解决方案优雅,但这一方案也很有效:
paste0(unlist(str_extract_all(filename, "[0-9]+")), collapse = "")
数据:
filename当然不如@akrun的解决方案优雅,但这个解决方案也很有效:
paste0(unlist(str_extract_all(filename, "[0-9]+")), collapse = "")
数据:
filename Trystr_extract(as.character(filename),”(?@WiktorStribiżew谢谢!但这是删除点后的所有内容。如果20030314
True,那么str_replace(as.character(filename),“*TAIRATE\\(\\d+)\(\\d+).*”,“\\1\\2”)呢
?这会有一个副作用:如果没有找到匹配项,则最终整个文件名将保持不变。请尝试str_extract(as.character(filename),“(?@WiktorStribiżew,谢谢!但这会删除点后的所有内容。如果20030314
True,那么str_replace(as.character(filename),“*TAIRATE\”。(\\d+)\(\\d+。*”,“\\1\\2”)
?这将产生一个副作用:如果没有找到匹配项,您将得到整个文件名不变的结果。@maximusdooku注意事项与中相同:这将产生一个副作用:如果没有找到匹配项,您将得到整个文件名unchanged@WiktorStribi谢谢你的提醒!还有,作为旁注——什么是好的r我有足够的资源来学习正则表达式,以使其发挥作用?我总是避免学习它。@maximusdooku我不知道你的正则表达式知识水平:),因此我只能建议你在上完成所有课程,通读,(还有许多其他到优秀在线资源的链接),以及所谓的社区。还有,值得一看。@maximudooku For R,另请参阅。@maximudooku与中的注释相同:这将产生一个副作用:如果没有找到匹配项,您将得到整个文件名unchanged@WiktorStribiżew感谢您的提醒!另外,作为旁注-什么是好的学习资源关于regex的知识足够让它发挥作用吗?我总是避免学习它。@maximusdooku我不知道你的regex知识水平:),所以我只能建议你在上完成所有课程,通读,(还有许多其他链接到优秀的在线资源),以及所谓的社区。另外,值得一看。@maximusdooku For R,另请参阅。
filename <- "/testData/THQ/TAIRATE.20030314.190000.tif"