【问题标题】:How can I target specific data frames based on pattern matching using Regex?如何使用正则表达式基于模式匹配来定位特定数据帧?
【发布时间】:2023-03-07 21:49:01
【问题描述】:

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

由于数据帧很多,我使用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 开头的任何内容,后跟四个数字,然后是一个下划线。问题是我似乎无法让正则表达式返回任何结果。

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

【问题讨论】:

  • 试试ls(pattern = "^jan[0-9]{4}_")
  • 完美!请将此作为答案发布,以便我接受。

标签: r regex list dataframe


【解决方案1】:

看来你可以用

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

详情

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

请参阅regex demo

如果您附加[0-9]{4}$,您将进一步限制模式,要求下划线右侧需要 4 位数字和字符串结尾。见another regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2018-01-29
    • 2019-10-09
    • 2016-11-28
    • 1970-01-01
    相关资源
    最近更新 更多