R 匹配“的实例”;"富",;后面不跟“;酒吧;
如何匹配后跟“foo”和“bar”以外的字符串(foo末尾有单词边界) 例子R 匹配“的实例”;"富",;后面不跟“;酒吧;,r,regex,R,Regex,如何匹配后跟“foo”和“bar”以外的字符串(foo末尾有单词边界) 例子 library(stringr) str_detect("foo 123", "\\bfoo\\b^(bar)") # should be TRUE str_detect("foo", "\\bfoo\\b^(bar)") # should be TRUE str_detect("foo bar", "\\bfoo\\b^(bar)") # should be FALSE 显然,我所尝试的,\\bfoo\\b^
library(stringr)
str_detect("foo 123", "\\bfoo\\b^(bar)") # should be TRUE
str_detect("foo", "\\bfoo\\b^(bar)") # should be TRUE
str_detect("foo bar", "\\bfoo\\b^(bar)") # should be FALSE
显然,我所尝试的,
\\bfoo\\b^(bar)
是不正确的。如果是消极的前瞻,您可以使用以下内容:
\bfoo\b(?!\W+bar)
显然,如果\
在R中是非法的,您需要逃逸它,因此您可以使用\\bfoo\\b(?!\\W+bar)
如果
bar
也必须是一个完整的单词,您可以在末尾添加一个额外的\b
:
\bfoo\b(?!\W+bar\b)
.在一般情况下,要检测
foo
后面没有bar
(位于foo
右侧的任何位置)的存在,可以使用带perl=TRUE
参数的基本Rgrep
:
x <- c("foo bar", "foo")
grep("(?s)foo(?!.*bar)", x, perl=TRUE, value=TRUE)
是的,别忘了在R代码中双转义反斜杠。这样,在foo之后的任何地方都不会出现条?或者只是后面的词?
foo(?!\s+bar) - no "bar" after "foo" separated with 1+ whitespaces from it
foo(?!\W+bar) - no "bar" after "foo" separated with 1+ non-word chars from it
foo(?!\w*bar) - no "bar" after "foo" in the same "word" (digits, letters, _)
foo(?!\p{L}*bar) - no "bar" after "foo" in the same letter-word