gpt4 book ai didi

R 的 grepl() 查找多个字符串存在

转载 作者:行者123 更新时间:2023-12-04 10:13:16 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





R regex to find two words same string, order and distance may vary

(2 个回答)


去年关闭。



grepl("instance|percentage", labelTest$Text)
如果 instance 中的任何一个都将返回 true或 percentage存在。
只有当这两个术语都存在时,我将如何实现?

最佳答案

Text <- c("instance", "percentage", "n", 
"instance percentage", "percentage instance")

grepl("instance|percentage", Text)
# TRUE TRUE FALSE TRUE TRUE

grepl("instance.*percentage|percentage.*instance", Text)
# FALSE FALSE FALSE TRUE TRUE

后者通过寻找:
('instance')(any character sequence)('percentage')  
OR
('percentage')(any character sequence)('instance')

当然,如果您需要找到两个以上单词的任意组合,这将变得非常复杂。那么评论中提到的解决方案会更容易实现和阅读。

匹配多个单词时可能相关的另一种替代方法是使用正向前瞻(可以被认为是“非消耗”匹配)。为此,您必须激活 perl正则表达式。
# create a vector of word combinations
set.seed(1)
words <- c("instance", "percentage", "element",
"character", "n", "o", "p")
Text2 <- replicate(10, paste(sample(words, 5), collapse=" "))

# grepl with multiple positive look-ahead
longperl <- grepl("(?=.*instance)(?=.*percentage)(?=.*element)(?=.*character)",
Text2, perl=TRUE)

# this is equivalent to the solution proposed in the comments
longstrd <- grepl("instance", Text2) &
grepl("percentage", Text2) &
grepl("element", Text2) &
grepl("character", Text2)

# they produce identical results
identical(longperl, longstrd)

此外,如果您将模式存储在向量中,则可以显着压缩表达式,从而为您提供
pat <- c("instance", "percentage", "element", "character")

longperl <- grepl(paste0("(?=.*", pat, ")", collapse=""), Text2, perl=TRUE)
longstrd <- rowSums(sapply(pat, grepl, Text2) - 1L) == 0L

正如评论中所要求的,如果您想匹配精确的单词,即不匹配子字符串,我们可以使用 \\b 指定单词边界。 .例如:
tx <- c("cent element", "percentage element", "element cent", "element centimetre")

grepl("(?=.*\\bcent\\b)(?=.*element)", tx, perl=TRUE)
# TRUE FALSE TRUE FALSE
grepl("element", tx) & grepl("\\bcent\\b", tx)
# TRUE FALSE TRUE FALSE

关于R 的 grepl() 查找多个字符串存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44152970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com