在R中验证输入字符串的正则表达式
我想在R中编写正则表达式来验证用户输入并相应地运行程序。 预计有3种类型的查询,都是字符向量。在R中验证输入字符串的正则表达式
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 , . - []()
。而且,查询2的格式应该只是数字,用, 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 @ ! & % # * ~ `_ = + []() - . ")}
在当前的正则表达式,你只是在查询模式("[A-Za-z]+"
)任何地方的发生。如果您想专门仅允许某些字符模式,则需要使用"^...$"
确保它在整个查询中匹配。
使用正则表达式有做什么,但对于匹配查询,而具体的特殊字符(但一切允许的),你可以使用下面的(这里,裹在all
考虑到您的query3
存在提供了一个例子始终多种方式矢量):
all(grepl("^[^@!&%#*~`_=+]+$", query)) # evaluates to TRUE for your query1, 2 & 3
有关,而不是做积极的匹配是数字加空格和逗号唯一的缺点查询:
all(grepl("^[0-9 ,]+$", query)) # evaluates to TRUE only for query3
谢谢你的解决方案。第二部分非常适合查询3格式。但是,我不想对所有3个(代码的第一部分)都进行评估。如果你检查'if condition语句'如果它是一个query3格式,我需要运行一个不同的代码。所以,只有一个正则表达式只针对查询1和2是正确的。谢谢 – user5249203
两个嵌套的if语句如何? (所有(grepl(“^ [^ @!&%#*〜_ = +] + $”,query))){if(all(grepl(“^ [0-9,]) +“,query))){print(”query3“)} else {print(”query1 and 2“)}} else {print(”not allowed“}' – sebkopf
什么是你的问题? – simbabque
对不起,监督。寻找解决方案,将允许一些特殊字符和限制其他? – user5249203
然后请删除多余的内容,只保留与问题相关的内容。而[MVCE(最小完整的可验证示例)](http://*.com/help/mcve)会很有帮助。 –