R - 正则表达式 - 捕获文件名中的数字

时间:2015-10-27 03:44:44

标签: regex r

我有几个文件。他们的名字示例如下: -

ABC2_5XYZ_7_data.csv     
DEF2_10QST_7_data.csv  

每当我读取文件名时,我想捕获_旁边的数字并将它们存储到另一个变量中。
在上面的例子中,这些是“5”和“10”。

有人可以提出建议吗?

1 个答案:

答案 0 :(得分:4)

我认为这会奏效。为了确保,我添加了几个字符串。由于我们正在寻找第一个也是唯一一个匹配项,因此我们可以使用sub()

x <- c("ABC2_5XYZ_data.csv", "DEF2_10QST_data.csv", "A123_456ABC_data.csv", "X9F4_7912D_data.csv")
sub(".*_(\\d+).*", "\\1", x)
# [1] "5"    "10"   "456"  "7912"

正则表达式.*_(\\d+).*捕获紧跟在下划线之后的数字。 \\1会将捕获的数字返回给我们。

  • .*匹配任何字符(换行符除外)
  • _字面匹配字符_
  • (启动捕获组
  • \\d+匹配数字一次或多次
  • )结束捕获组
  • .*匹配任何字符(换行符除外)

可以在regex101

找到进一步的解释

OP更改问题后更新:为了回复您的评论和更改的问题,您可以使用以下内容。请注意,我们仍在使用sub()(不是gsub()!),因为我们需要第一次匹配

x <- c("ABC2_5XYZ_7_data.csv", "DEF2_10QST_7_data.csv")
sub("[[:alnum:]]+_(\\d+).*", "\\1", x)
# [1] "5"  "10"