我想使用正则表达式来查看字符串是否不以某种特定模式开头。虽然我可以使用:[^将某些字符列入黑名单,但我不知道如何将模式黑名单。

> grepl("^[^abc].+$", "foo")
[1] TRUE
> grepl("^[^abc].+$", "afoo")
[1] FALSE


我想做类似grepl("^[^(abc)].+$", "afoo")的操作并获取TRUE,即如果字符串不是以abc序列开头的则匹配。

请注意,我知道this post,并且我也尝试使用perl = TRUE,但没有成功:

> grepl("^((?!hede).)*$", "hede", perl = TRUE)
[1] FALSE
> grepl("^((?!hede).)*$", "foohede", perl = TRUE)
[1] FALSE


有任何想法吗?

最佳答案

是的将零宽度前行/外/其他括号。那应该给你这个:

> grepl("^(?!hede).*$", "hede", perl = TRUE)
[1] FALSE
> grepl("^(?!hede).*$", "foohede", perl = TRUE)
[1] TRUE


我想这就是你想要的。

或者,如果要捕获整个字符串,则^(?!hede)(.*)$^((?!hede).*)$都是等效的并且可以接受。

关于regex - R-regex:匹配不是以模式开头的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8438173/

10-10 18:26