R语言如何提取字符向量指定部分并替换字符串分隔符
R语言文件名清洗实现方案
你可以通过正则匹配配合gsub函数完成需求,以下是可直接运行的实现代码:
分步实现(逻辑易读)
# 原始数据 filenames <- c('1194-1220-1479-891--(133.07).RDS','1194-1221-1421-891--(101.51).RDS') # 第一步:移除双短横线后的所有冗余内容(含括号内数字、.RDS后缀) trimmed <- gsub(pattern = "--.*$", replacement = "", x = filenames) # 第二步:将剩余短横线替换为斜杠 filenames_desired <- gsub(pattern = "-", replacement = "/", x = trimmed) # 输出验证 print(filenames_desired) # > [1] "1194/1220/1479/891" "1194/1221/1421/891"
正则逻辑说明
- 模式
--.*$的匹配规则:从字符串里第一个双短横线--开始,匹配到字符串末尾的所有内容,一次性覆盖括号数值、文件后缀所有冗余部分,不需要单独编写括号匹配规则。 - 如果需要更严格的精准匹配,避免文件名其他位置出现双短横线导致误删,可以替换第一步的匹配模式为
--\\(.*\\)\\.RDS$:注意正则中(、)、.都是特殊元字符,需要加\\转义才能匹配字面意义的括号和点号。
一步到位写法(捕获组实现)
如果想要单步完成清洗,可以用正则捕获组提取有效数字段直接拼接:
filenames_desired <- gsub( pattern = "^(\\d+)-(\\d+)-(\\d+)-(\\d+)--.*$", replacement = "\\1/\\2/\\3/\\4", x = filenames )
该写法会直接提取开头四段用短横线分隔的数字ID,自动忽略后面所有内容,容错性更强,即使后续括号内的内容、后缀格式发生变动也不会影响输出结果。
内容的提问来源于stack exchange,提问作者Samet Sökel
相关产品推荐
相关产品推荐

