用于验证R中输入字符串的正则表达式

时间:2016-04-28 14:01:13

标签: regex r pcre

我正在尝试在R中编写正则表达式来验证用户输入并相应地运行程序。 期望3种类型的查询,都是字符向量。

query1 = "Oct4[Title/Abstract] AND BCR-ABL1[Title/Abstract] 
         AND stem cells[Title] AND (2000[PDAT] :2015[PDAT])"
query2 <-c("26527521","26711930","26314551")

以下代码有效。但挑战是在两种情况下限制特殊字符

all(grepl("[A-Za-z]+",query,perl=TRUE)) validates False for query 2 

或@sebkopf建议

all(grepl("^[0-9 ,]+$", query)) # evaluates to TRUE only for query 2

但是,查询1也将年份作为输入,这意味着它应该接受查询1的数字输入。为了增加复杂性,query1中允许space , . - [] ()。而且,query2的格式应该只是数字,由, or space分隔。其他任何事都应该抛出错误 如何将这些条件作为R正则表达式的一部分?那么,相应地验证以下if conditions以运行相应的代码?

 if (grepl("regex for query 1& 2",query,perl=TRUE) == True {
 Run code 1
} else { print ("these characters are not allowed @ ! & % # * ~ `_ = +") }  
 if (grepl("regex for query3",query,perl=TRUE) == True {
 Run code 2
} else { print ("these characters are not allowed @ ! & % # * ~ `_ = + [] () - . ")}

1 个答案:

答案 0 :(得分:1)

在当前的regexp中,您只是在查询中查找模式("[A-Za-z]+" where 的出现。如果您只想特定地允许某些字符模式,则需要确保它使用"^...$"在整个查询中匹配。

使用正则表达式总是有多种方法可以做任何事情,除了提供一个匹配查询而没有特定特殊字符(但允许其他所有内容)的示例,您可以使用以下内容(此处包含在all中进行说明你的query3是一个向量):

all(grepl("^[^@!&%#*~`_=+]+$", query)) # evaluates to TRUE for your query1, 2 & 3

相反,执行肯定匹配仅捕获数字加空格和逗号的查询:

all(grepl("^[0-9 ,]+$", query)) # evaluates to TRUE only for query3