R regex验证用户输入是否正确

时间:2010-03-16 00:29:15

标签: regex r

我正在尝试编写更好的代码,所以我想用regex验证我的输入序列,以确保我得到的第一件事只是一个字母A到H,第二个是1到12的数字只要。我是正则表达式的新手,不知道表达式应该是什么样的。如果失效,我也不确定R会抛出什么类型的错误?

在Perl中,我想是这样的:= ~m /([A-M]?))/)

这是我到目前为止对R:

input_string = "A1"
first_well_row = unlist(strsplit(input_string, ""))[1]  # get the letter out
first_well_col = unlist(strsplit(input_string, ""))[2]  # get the number out  

2 个答案:

答案 0 :(得分:2)

在R代码中,使用David的正则表达式:[编辑以反映Marek的建议]

validate.input <- function(x){
  match <- grepl("^[A-Ha-h]([0-9]|(1[0-2]))$",x,perl=TRUE)
  ## as Marek points out, instead of testing the length of the vector
  ## returned by grep() (which will return the index of the match and integer(0) 
  ## if there are no matches), we can use grepl()
  if(!match) stop("invalid input")
  list(well_row=substr(x,1,1), well_col=as.integer(substr(x,2,nchar(x))))
}

这只会产生错误。如果你想更好地控制错误处理,请查看tryCatch的文档,这是一个原始的用法示例(而不是像我们之前返回NA那样得到错误):

validate.and.catch.error <- function(x){
  tryCatch(validate.input(x), error=function(e) NA)
}

最后,请注意您可以使用substr提取字母和数字,而不是使用strsplit。

答案 1 :(得分:0)

您专门询问“A到H,然后是0-9或10-12”。调用异常“InvalidInputException”或任何类似命名的对象 - “无效”“输入”“异常”

/^[A-H]([0-9]|(1[0-2]))$/

在伪代码中:

validateData(String data)
  if not data.match("/^[A-H]([0-9]|(1[0-2]))$/")
    throw InvalidInputException