匹配范围与字符串中的正则表达式

时间:2017-12-11 11:49:31

标签: r

我有一个代码列表,其中包含一个字母后跟两位数字的结构,我想提取以某个字母开头并包含某个范围内的数字的代码。让我们说我有这样的代码:

A01
A03
A06
A12
A99
B01
C09

我想提取A[01-12]所以我最终得到了4个代码。我如何在R中做到这一点?我四处寻找这个问题的答案,但我找不到任何相关的东西。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

以下是一个快速示例,说明如何将标识符拆分为两列进行过滤。

library(tidyverse)
df <- data.frame(Code=c("A01",
                        "A03",
                        "A06",
                        "A12",
                        "A99",
                        "B01",
                        "C09"))

df <- df %>%
  mutate(Code1 = substr(Code,1,1)) %>%
  mutate(Code2= as.numeric(substr(Code,2,3)))

df %>%
  filter(Code1=="A" & Code2<=12)

它具有灵活的过滤功能,您可以根据需要在过滤后删除列。

答案 1 :(得分:1)

另一种方式可能是:

string <- c("A01", "A03", "A06", "A12", "A99", "B01", "C09")

string[grepl("(?<=A)[0-1](?<!1)[1-9]|(?<=A)[0-1](?<=1)[1-2]", string, perl = TRUE)]

[1] "A01" "A03" "A06" "A12"