首页 > 解决方案 > 匹配“foo”的实例,后面没有“bar”

问题描述

如何匹配具有“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^(bar)方法是不正确的。

标签: rregex

解决方案


使用负前瞻,您可以使用以下内容:

\bfoo\b(?!\W+bar)

正则表达式 101 演示

显然,如果\在 R 中是非法的,你需要逃避它,所以你会使用它\\bfoo\\b(?!\\W+bar)


如果bar还必须是一个完整的单词,您可以\b在末尾添加一个额外的:

\bfoo\b(?!\W+bar\b)

另一个演示


推荐阅读