我正在尝试在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 @ ! & % # * ~ `_ = + [] () - . ")}
答案 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