使用通配符按时间间隔进行匹配

时间:2018-09-05 10:01:43

标签: r regex pattern-matching matching

我有两个值,例如:

from = XY05*
to = XY55*

然后我有一个tbl_dff,其中包含很多字符串。

Codes = ["XY05A", "XY56", "XY555", "AT003", "XY55AB", "XY35QA"
              "GA003A", "XY36", "XY100", "XY03",...]

我想使用变量fromto来查看变量Codes中是否有这些变量。

从示例中,我希望对以下项进行匹配:

"XY05A"
"XY555"
"XY36"
"XY55AB"
"XY35QA"

因为它介于XY05* - XY55*之间。 *只是说,我不在乎会发生什么。

希望这很有道理。

2 个答案:

答案 0 :(得分:1)

尝试以下模式:XY(0[5-9]|[1-4]\d|5[0-5]).*

(0[5-9]|[1-4]\d|5[0-5])将匹配0555之间的任意数字以及其后的任意数字。

Demo

答案 1 :(得分:0)

可以使用fromto作为整数而不是完整字符串吗?这样,您可以从Codes向量中提取整数,并将它们直接与fromto进行比较:

from <- 5
to <- 55

pattern <- "XY([0-9]+).*"

# use regex to extract the integer part of each string
Codes_int <- as.integer( sub( pattern, "\\1", Codes ) )

# return only the `Codes` where the integer is in range
Codes[ Codes_int >= from & Codes_int <= to & grepl( pattern, Codes ) ]