GREP:在字符串列表中查找两个单词共存的位置
鉴于以下列表:GREP:在字符串列表中查找两个单词共存的位置,r,R,鉴于以下列表: list <- c("Horse Cat - Dog - Snake/Cow", "Monkey Chicken - Horse - Donkey/Cow", "Fish Rat - Tortoise - Worm/Bird", "Bat Lizard - Ox - Snake/Cow", "Dog Cat - Horse - Snake/Cow") list您可以尝试使用regex实现这一点,这似乎很有效 grepl("Horse.*?Cow|Co
list <- c("Horse Cat - Dog - Snake/Cow", "Monkey Chicken - Horse - Donkey/Cow", "Fish Rat - Tortoise - Worm/Bird", "Bat Lizard - Ox - Snake/Cow",
"Dog Cat - Horse - Snake/Cow")
list您可以尝试使用regex实现这一点,这似乎很有效
grepl("Horse.*?Cow|Cow.*?Horse", list)
## [1] TRUE TRUE FALSE FALSE TRUE
如果要忽略案例,可以添加ignore.case=TRUE
顺便说一句,如果你想知道位置,最好使用grep
,如中所示
grep("Horse.*?Cow|Cow.*?Horse", list)
## [1] 1 2 5
最简单的方法就是使用两个grepl
并与&
R> grepl("Horse", list) & grepl("Cow", list)
[1] TRUE TRUE FALSE FALSE TRUE
自
R> grepl("Horse", list)
[1] TRUE TRUE FALSE FALSE TRUE
R> grepl("Cow", list)
[1] TRUE TRUE FALSE TRUE TRUE
或者,您可以使用单个grepl
命令:
grepl("Cow.*Horse|Horse.*Cow", list)
要返回逻辑向量,可以使用:
grepl("Horse", list) & grepl("Cow", list)
要返回索引,请将上述语句包装在另一种可能性中:
grepl("^(?=.*\\bHorse\\b)(?=.*\\bCow\\b)", list, perl=TRUE)
## [1] TRUE TRUE FALSE FALSE TRUE
尽管:
grepl("^(?=.*\\bhorse\\b)(?=.*\\bcow\\b)", list, ignore.case=TRUE, perl=TRUE)
当情况不同时,可能更有用。可能与和外部有关grepl(“Horse”,list)&grepl(“Cow”,list)
或者根据您的应用程序更加灵活:pattern=c(“Horse”,“Cow”)
Reduce(`&`,lappy(pattern,grepl,list))