r- grepl 以任何顺序查找匹配的字符串
r- grepl to find matching strings in any order
我有一个匹配的字符串。需要查找匹配多个字符串 (both/all) 和任意顺序的文本:
Text1 : "I have no intention to make illegal parking along the road or cause obstruction."
Text2 : "I have no intention to make illegal parking along the road or cause damage."
我的代码:
mynames=c("illegal parking" , "obstruction")
grepl(paste(mynames, collapse='|'), Text1, ignore.case=TRUE)
当我通过 Text1
和 Text2
- 我得到 TRUE
- 对于两者;
但是我需要 TRUE
用于 Text1
和 FALSE
用于 Text2
。它应该在只有两个字符串都存在时产生 - 并且它可以在文本中以任何顺序排列。
|
在正则表达式中表示 "or"。这就是为什么它在两个文本上都是正确的。
您必须测试 "illegal parking"
是否跟随 "obstruction"
(中间有或没有东西),在正则表达式中这是 "illegal parking.*obstruction"
,或者如果您有相反的方式,所以 "illegal parking.*obstruction|obstruction.*illegal parking"
grepl("illegal parking.*obstruction|obstruction.*illegal parking", Text1, ignore.case=TRUE)
您可以测试 str_extract_all()
的结果,看看两者是否匹配。这种方法意味着您不必担心顺序。
library(stringr)
library(purrr)
map_lgl(str_extract_all(c(Text1, Text2), paste(mynames, collapse='|')), ~all(mynames %in% .x))
[1] TRUE FALSE
我有一个匹配的字符串。需要查找匹配多个字符串 (both/all) 和任意顺序的文本:
Text1 : "I have no intention to make illegal parking along the road or cause obstruction."
Text2 : "I have no intention to make illegal parking along the road or cause damage."
我的代码:
mynames=c("illegal parking" , "obstruction")
grepl(paste(mynames, collapse='|'), Text1, ignore.case=TRUE)
当我通过 Text1
和 Text2
- 我得到 TRUE
- 对于两者;
但是我需要 TRUE
用于 Text1
和 FALSE
用于 Text2
。它应该在只有两个字符串都存在时产生 - 并且它可以在文本中以任何顺序排列。
|
在正则表达式中表示 "or"。这就是为什么它在两个文本上都是正确的。
您必须测试 "illegal parking"
是否跟随 "obstruction"
(中间有或没有东西),在正则表达式中这是 "illegal parking.*obstruction"
,或者如果您有相反的方式,所以 "illegal parking.*obstruction|obstruction.*illegal parking"
grepl("illegal parking.*obstruction|obstruction.*illegal parking", Text1, ignore.case=TRUE)
您可以测试 str_extract_all()
的结果,看看两者是否匹配。这种方法意味着您不必担心顺序。
library(stringr)
library(purrr)
map_lgl(str_extract_all(c(Text1, Text2), paste(mynames, collapse='|')), ~all(mynames %in% .x))
[1] TRUE FALSE