用于验证 R 中输入字符串的正则表达式
Regular expression for validating input string in R
我正在尝试在 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 应该接受数字输入。为了增加复杂性,查询 1 中允许 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 @ ! & % # * ~ `_ = + [] () - . ")}
在您当前的正则表达式中,您只是在查询中寻找模式 ("[A-Za-z]+"
) anywhere 的出现。如果您只想明确允许某些字符模式,则需要使用 "^...$"
确保它在整个查询中匹配。
对于正则表达式,总是有多种方法可以做任何事情,除了提供一个示例来匹配没有特定特殊字符的查询(但其他一切都允许),您可以使用以下内容(此处包含在 all
中)说明你的 query3
是一个矢量):
all(grepl("^[^@!&%#*~`_=+]+$", query)) # evaluates to TRUE for your query1, 2 & 3
而不是进行正匹配以仅捕获数字加上 space 和逗号的查询:
all(grepl("^[0-9 ,]+$", query)) # evaluates to TRUE only for query3
我正在尝试在 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 应该接受数字输入。为了增加复杂性,查询 1 中允许 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 @ ! & % # * ~ `_ = + [] () - . ")}
在您当前的正则表达式中,您只是在查询中寻找模式 ("[A-Za-z]+"
) anywhere 的出现。如果您只想明确允许某些字符模式,则需要使用 "^...$"
确保它在整个查询中匹配。
对于正则表达式,总是有多种方法可以做任何事情,除了提供一个示例来匹配没有特定特殊字符的查询(但其他一切都允许),您可以使用以下内容(此处包含在 all
中)说明你的 query3
是一个矢量):
all(grepl("^[^@!&%#*~`_=+]+$", query)) # evaluates to TRUE for your query1, 2 & 3
而不是进行正匹配以仅捕获数字加上 space 和逗号的查询:
all(grepl("^[0-9 ,]+$", query)) # evaluates to TRUE only for query3