Совпадение на интервале с подстановочным знаком - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть два значения, например:

from = XY05*
to = XY55*

Тогда у меня есть tbl_dff, который содержит много строк.

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

Я хочу использовать мои переменные from и to, чтобы посмотреть, есть ли какие-либо из них в моей переменной Codes.

Из примера я хочу найти совпадение:

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

Так как это между XY05* - XY55*. * просто говорит, что мне все равно, что будет после.

Надеюсь, это имеет смысл.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Можете ли вы иметь from и to как целые числа вместо полных строк? Таким образом, вы можете извлечь целые числа из вектора Codes и сравнить их непосредственно с from и to:

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 ) ]
0 голосов
/ 05 сентября 2018

Попробуйте этот шаблон: XY(0[5-9]|[1-4]\d|5[0-5]).*.

(0[5-9]|[1-4]\d|5[0-5]) будет соответствовать любому числу от 05 до 55 и любому количеству любых символов после.

Демо

...