r - 有异常的正则表达式
问题描述
我想知道向量中是否存在模式,可以说:
vector <- c(paste0(paste("MC", 1:25), c(rep("", 10), rep("-P1",10), rep("P1",5))), rep("RANDOM", 10),c("MC1","MC2","MC-3"), rep("MCRANDOM", 10))
vector
我想要带有“MC”的那些,后面跟着一个数字。它们之间可以是数字,也可以是连字符或空格,然后是数字。我想排除那些是较大代码的一部分,即带有 P 和另一个数字的代码,例如:“MC 20-P1”“MC 21P1”。这将检测具有 MC 和编号的那些:
vector[grepl("MC( |-)*[0-9]{1,}", vector)]
我尝试使用^
排除,但我的尝试失败了:
vector[grepl("MC( |-)*[0-9]{1,}[^(-*)P]", vector)]
我怎样才能只匹配带有 MC 和数字的那些?(在我的真实数据中是较大文本的一部分)
解决方案
我们可以在此处指定 start ( ^
) 和 end ( $
) 以匹配以 'MC' 开头的字符串,后跟空格或-
然后是一位或多位数字 ( \\d+
) 直到结尾
grep("^MC[- ]?\\d+$", vector, value = TRUE)
#[1] "MC 1" "MC 2" "MC 3" "MC 4" "MC 5" "MC 6"
#[7] "MC 7" "MC 8" "MC 9" "MC 10" "MC1" "MC2" "MC-3"
如果MC
可以是子字符串,则使用单词边界 ( \\b
) 代替^
推荐阅读
- sql - 检查触发器中的日期
- ruby-on-rails - Rails 5.2 如何修复缺少要链接的主机!请提供 :host 参数
- javascript - Turn the tab active based on the current url
- html - 如何在 css 中的特定页面的页面标题下覆盖 Bootstrap 页面标题
- pytest - Pytest 运行 unittest 并退出核心转储
- java - 在联合查询上构建 RDF 图?
- php - 重定向到不同的页面而不更改浏览器中的 url
- javascript - (control: AbstractControl) :
- php - 一个值应该有各自的另一个值,重复值应该使用 php 在数组中通知
- jmeter - 加特林在金牛座与馈线