通过正则表达式匹配矢量的值

时间:2016-04-11 19:48:29

标签: regex r

我试图弄清楚如何创建一个正则向量,它将匹配向量中的任何值,然后重复第二个向量中的任何值。例如:

nums<-c("1","2","3","4")
syms<-c("+","-","*","\")
#program output
[1] "1"  "2"  "3"  "4"  "+"  "-"  "*"  "/"
#does the output match values from nums,syms repeatedly?

例如

1+2     GOOD
1*2+3/4 GOOD
13+4    BAD (no symbol in between the numbers)

我尝试这种方法的原因是nums的值会经常改变

2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式^(?:(?:1|2|3|4)[+\-*\/])+(?:1|2|3|4)$
每次更改时,都会将(?:1|2|3|4)组替换为nums

Demo here

如果有两位或更多位数的数字,我没有使nums成为一个字符组。如果nums只能包含1位数字,则可以使用[1234]或任何值替换组。

答案 1 :(得分:0)

假设您的输入已经是一个名为input

的向量,这是一个公认的丑陋黑客
nums<-c("1","2","3","4")
syms<-c("+","-","*","\\")

# set some stopping parameter and starting value
moveON <- TRUE
spot <- 1

while(moveOn) {
  if(input[spot] %in% nums) spot <- spot +1
  else stop(paste(input[spot], "is not a number")

  # stop loop when input is finished
  if(spot > length(input)) break

  if(input[spot] %in% syms) spot <- spot +1
  else stop(paste(input[spot], "is not a symbol")

  # stop loop when input is finished
  if(spot > length(input)) break
}

print("finished and all is well")