如何使用Regex基于模式匹配来定位特定数据帧?

时间:2018-04-06 10:06:32

标签: r regex list dataframe

我有几个数据框,我想将特定的数据框合并到列表中以便于管理。

由于有很多数据框,我使用lapply()来快速执行合并。

我的模式匹配(正则表达式)元素如下所示:

ls(pattern = "jan[0-9]")

返回:

[1] "jan0000"      "jan0000_0059" "jan0100"      "jan0100_0159" "jan0200"      "jan0200_0259" "jan0300"      "jan0300_0359" "jan0400"      "jan0400_0459" "jan0500"
[12] "jan0500_0559" "jan0600"      "jan0600_0659" "jan0700"      "jan0700_0759" "jan0800"      "jan0800_0859" "jan0900"      "jan0900_0959" "jan1000"      "jan1000_1059"
[23] "jan1100"      "jan1100_1159" "jan1200"      "jan1200_1259" "jan1300"      "jan1300_1359" "jan1400"      "jan1400_1459" "jan1500"      "jan1500_1559" "jan1600"
[34] "jan1600_1659" "jan1700"      "jan1700_1759" "jan1800"      "jan1800_1859" "jan1900"      "jan1900_1959" "jan2000"      "jan2000_2059" "jan2100"      "jan2100_2159"
[45] "jan2200"      "jan2200_2259" "jan2300"      "jan2300_2359"

然而,问题是我只想提取名称长度为12个字符的数据帧。

我尝试了很多东西,比如搜索一个确切的长度(我感兴趣的长度都是相同的长度):

ls(pattern = "jan[0-9]{12}")

但它返回:

character(0)

我认为另一种方法是搜索以jan开头的任何内容,然后是四个数字,然后是下划线。问题是我似乎无法获得正则表达式返回任何结果。

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

好像你可以使用

ls(pattern = "^jan[0-9]{4}_")

<强>详情

  • ^ - 字符串开头
  • jan - 文字子字符串
  • [0-9]{4} - 任意四位ASCII数字
  • _ - 下划线。

请参阅regex demo

如果你追加[0-9]{4}$,你将进一步限制模式,要求4位数字和下划线右边的字符串结尾。请参阅another regex demo