下面是我的R对象(x)和一些可以工作的命令和一些不能工作的命令。
(x <- c("q10_1", "q10_2", "q10_11", "q12_1", "q12_2", "q13_1", "q13_11"))
# Which strings start with "q10" or "q12? - WORKS
x[grep("^q10|q12", x)]
# Which strings end with "1"? - WORKS
x[grep("1$", x)]
# Which strings end with "_1"? - WORKS
x[grep("\\_1$", x)]
# Which strings start with "q10" AND contain a "1"? - WORKS
x[grep("^q10.+1", x)]
# Which strings start with "q10" AND end with a "_1"? - DOES NOT WORK
x[grep("^q10.+\\_1$", x)]
# Which strings start with "q10" or "q12 AND end with "_1"? - WORKS INCORRECTLY
x[grep("^q10|q12.+\\_1$", x)]谢谢!
发布于 2015-09-18 05:37:06
下面是所有的修复和优化:
x <- c("q10_1", "q10_2", "q10_11", "q12_1", "q12_2", "q13_1", "q13_11")
## Which strings start with "q10" or "q12? - WORKS - FIXED
x[grep("^q1[02]", x)]
## Which strings end with "1"? - WORKS
x[grep("1$", x)]
## Which strings end with "_1"? - WORKS - FIXED
x[grep("_1$", x)]
## Which strings start with "q10" AND contain a "1"? - WORKS - FIXED
x[grep("^q10.*1", x)]
## Which strings start with "q10" AND end with a "_1"? - DOES NOT WORK - FIXED
x[grep("^q10.*_1$", x)]
## Which strings start with "q10" or "q12 AND end with "_1"? - WORKS INCORRECTLY - FIXED
x[grep("^q1[02].*_1$", x)]请参阅IDEONE demo
备注:
可以将
^q10|q12表示为^q1[02],以提高性能并缩短模式。这也解决了你在input.\\_1$中任何地方匹配q12时遇到的^q10|q12问题-你不需要转义q10*量词,因为在^q10|q12后面可以有*,就像上面最后两个表达式的问题一样。*匹配0个或更多字符,而+需要至少1个字符。因此,您没有匹配项。^q10|q12.+\\_1$ -匹配开头的q10,结尾的q12.+_1,逻辑由于缺少分组(^(q10|q12).+\\_1$)而被破坏,但最好使用^q1[02].*_1$.https://stackoverflow.com/questions/32640285
复制相似问题