Regex 使用gsub从字符串中删除部分图案

Regex 使用gsub从字符串中删除部分图案,regex,r,gsub,Regex,R,Gsub,我有这样一个字符串列表(省略58*5个案例): 我希望在这些方面使用gsub,以便最终得到(仅示例): 目前,我的代码如下: fileNames <- Sys.glob("part*.csv") for (fileName in fileNames) { sample <- read.csv(fileName, header = FALSE, sep = ",") part <- gsub("[^0-9]+", "", substring(fileName

我有这样一个字符串列表(省略58*5个案例):

我希望在这些方面使用gsub,以便最终得到(仅示例):

目前,我的代码如下:

fileNames <- Sys.glob("part*.csv")

for (fileName in fileNames) {
    sample <- read.csv(fileName, header = FALSE, sep = ",")
    part   <- gsub("[^0-9]+", "", substring(fileName, 5, last = 1000000L))
    print(part)
}
但是,我不知道如何在这些字符串之间保留一个下划线。

试试看

sub('[^0-9]+_([0-9]+_).*([0-9]+).*', '\\1\\2', str1)
#[1] "01_1"

数据
str1这里还有几个选项(使用akrun的
str1
):

或者使用适当的索引访问字符:

paste0(substr(str1, 13, 15), substr(str1, 24, 24))
#[1] "01_1"

对不起,我要把赛普丽放在潜艇前面吗?剧本的第一部分就像一个奇迹though@MichaelAnderson在
sub
之前不需要
sapply
。您可以使用整个列,即
sub(..,yourdf$yourcolumn)
str\u extract\u all\u regex()。
011
605
sub('[^0-9]+_([0-9]+_).*([0-9]+).*', '\\1\\2', str1)
#[1] "01_1"
library(stringr)
sapply(str_extract_all(str1, '\\d+'), paste, collapse='_')
str1 <- 'participant_01_Bullpup_1.xml'
gsub("[^0-9_]+|(?<=\\D)_", "", str1, perl=TRUE)
#[1] "01_1"
sub(".+?(\\d+_).+?(\\d+).+", "\\1\\2", str1, perl=TRUE)
#[1] "01_1"
sub(".+?(\\d+).+?(\\d+).+", "\\1_\\2", str1, perl=TRUE)
#[1] "01_1"
paste(strsplit(str1, "\\D+")[[1]][-1], collapse="_")
#[1] "01_1"
sub(".{12}(\\d+_).{8}(\\d+).{4}", "\\1\\2", str1)
#[1] "01_1"
paste0(substr(str1, 13, 15), substr(str1, 24, 24))
#[1] "01_1"