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