grepl:如何修复"无效使用重复运算符"通过逃避整个词?

时间:2017-08-24 11:30:50

标签: r regex

我有一个最终会做的用例。

pattern <- sprintf('(^|,)%s(,|$)','tip++')
grepl(pattern=pattern,x='some,more,tipp++,for,me')

输出结果为:

Error in grepl(pattern = sprintf("(^|,)%s(,|$)", "tip++"), x = "some,more,tipp++,for,me") : 
invalid regular expression '(^|,)tip++(,|$)', reason 'Invalid use of repetition operators'

问题显然是模式中的+字符,对于这个用例,我不幸地使用fixed=TRUE,因为我需要考虑字符串的开始或结束的边界和逗号分隔符。

有没有办法逃避单词的内容,但仍然使用fixed=FALSE保留正则表达式模式?

我试过这个但似乎没有用,即使用\b字边界:

pattern <- sprintf('(^|,)\b%s\b(,|$)','tip++')

还有一件事,我事先并不知道要搜索什么样的值,所以我更倾向于使用一种强大的方法来逃避整个%s而不是仅仅处理+示例

1 个答案:

答案 0 :(得分:1)

逃避tip++中的优势:

pattern <- sprintf('(^|,)%s(,|$)','tip\\+\\+')
grepl(pattern=pattern,x='some,more,tip++,for,me')

<强>输出:

[1] TRUE