如何在同一字符串中找到多个下划线?

时间:2019-01-24 00:08:32

标签: r regex string

我有带不同下划线数量的字符串。我试图选择包含两个或多个下划线的字符串。有什么建议么?

Strings <- c("aa_bb", "aa_bb_cc_dd", "jah_ghtfv_jal")

目前,我有:

Match1 <- Strings[grepl("[_].+[_]", Strings) == TRUE,] and
Match2 <- Strings[grepl("_.*_", Strings) == TRUE,]

两者返回的计数略有不同。任何人都可以想出一种更好的方法来计数以返回具有两个或多个下划线的字符串吗?

在这种情况下,我想返回“ aa_bb_cc_dd,” jah_ghtfv_jal”。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果字符串可以采用任何形式,并且下划线可以出现在任何位置(例如,仅包括两个下划线“ __”),则可以使用stringr::str_count进行计数:

library(stringr)
Strings[str_count(Strings, "_") > 1]

答案 1 :(得分:0)

您当前使用的grepl是不正确的,您应该使用此方法:

Match1 <- Strings[grepl("[_].+[_]", Strings)]
Match2 <- Strings[grepl("_.*_", Strings)]

这两个都返回相同的结果,符合您的期望。但是,我认为您真正的意思是:

Strings <- c("aa_bb", "aa_bb_cc_dd", "jah_ghtfv_jal")
Strings[grepl("_[^_]+_", Strings)]

[1] "aa_bb_cc_dd"   "jah_ghtfv_jal"

这将匹配具有下划线,后跟一个或多个非下划线字符,再加上下划线的任何字符串。