如何在R中编写模式以表示“不包含”?

3
我想匹配不包含字符串前面的“hallo”的字符。
>string <- c("halloman","hi","dancing","manhallomorning")
>grep("hallo",string,invert=TRUE)
[1] 2 3
grep("(?<!hallo)\\w+",string,perl=TRUE)  
[1] 1 2 3  4  #the result is 2 3  which do not contain "hallo" .

如何修改模式以表示“不包含 hallo ”?

我更新了答案。看看吧。顺便问一下,为什么不直接使用 invert=TRUE - falsetru
亲爱的falsetru,invert=TRUE只能在R中使用,而^((?!hallo).)*$可以更广泛地使用。 - showkey
2个回答

2
使用负向先行断言。指定^只匹配字符串的开头。
> string <- c("halloman", "hi", "dancing")
> grep("^(?!hallo)", string, perl=TRUE)
[1] 2 3

抱歉,我无法理解您需要翻译的具体内容。请提供需要翻译的文本。
> string <- c("halloman","hi","dancing","manhallomorning")
> grep("^((?!hallo).)*$", string, perl=TRUE)
[1] 2 3

1
您可能不需要使用负向先行断言。以下代码可以实现相同的功能:
> grep("^hallo",string,invert=TRUE)
[1] 2 3

即,组合的
^ = at the beginning of the string,
invert=TRUE to return elements that do NOT match

足够了。
如果你坚持使用负向预查,这也可以起作用。
> grep("^(?!hallo)", string, perl=TRUE)
[1] 2 3

我使用了负向先行断言,而不是后行断言,并再次使用了 ^ 锚点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接