首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: Hep with regex!- ^、|、\\、_和$的组合

R: Hep with regex!- ^、|、\\、_和$的组合
EN

Stack Overflow用户
提问于 2015-09-18 05:29:57
回答 1查看 69关注 0票数 1

下面是我的R对象(x)和一些可以工作的命令和一些不能工作的命令。

代码语言:javascript
复制
(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)]

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 05:37:06

下面是所有的修复和优化:

代码语言:javascript
复制
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
  • Same -你需要使用一个*量词,因为在^q10|q12后面可以有*,就像上面最后两个表达式的问题一样。*匹配0个或更多字符,而+需要至少1个字符。因此,您没有匹配项。
  • 最后一个- ^q10|q12.+\\_1$ -匹配开头的q10,结尾的q12.+_1,逻辑由于缺少分组(^(q10|q12).+\\_1$)而被破坏,但最好使用^q1[02].*_1$.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32640285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档