Получить слово перед регулярным выражением из символьной переменной - PullRequest
0 голосов
/ 23 января 2019

Я хочу получить имя переменной до in (?) символов.
Например:
expect_equal("x", foo("select * from t where x in (?)"))

это моя попытка:

stmt <- "select * from t where x in (?)"
idxParam <- gregexpr("x in\\(?", stmt)[[1]]
substring(stmt, idxParam, idxParam + 1)

но если длина слова> 1, то это не получается ... Может быть, есть функция подстроки, которая принимает в качестве параметров первую букву слова и заканчивается на пробеле ?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Использование stringr:

library(stringr)
string <- "select * from t where x in (?)"
str_extract(string, "\\w+(?=\\s+in)")

В этом решении используется положительный прогноз для извлечения первого слова, которое предшествует \\s+in.Где \\s+ - любое число (> 0) пробелов.

Может быть легко переведено в базу R:

sub(".+(\\w+)(?=\\s+in).+", "\\1", string, perl = TRUE)

РЕДАКТИРОВАТЬ: решение без регулярных выраженийэто также может иметь дело со многими in:

string_split <- strsplit(string, " ")[[1]]
string_split[which(string_split == "in") - 1]
0 голосов
/ 23 января 2019

Вот способ:

stmt <- "select * from t where x in (?)"
stmt_trimmed <- sub(" in \\(\\?\\)","", stmt) # [1] "select * from t where x"
tail(strsplit(stmt_trimmed," ")[[1]],1)
# [1] "x"

Я не знаю точно, что вы пытались сделать, но некоторые ошибки не ускользали от ? и не забывали пробел после in

Re: как насчет этого: выберите * из t, где x in (?) И y in (?)

x <- "select * from t where x in (?) and y in (?)"
pattern <- " ([^ ]+) in \\(\\?\\)"
raw_matches <- regmatches(x,gregexpr(pattern,x))
clean_matches <- gsub(pattern,"\\1",raw_matches[[1]])
clean_matches
# [1] "x" "y"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...