我有一个最终会做的用例。
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
而不是仅仅处理+
示例
答案 0 :(得分:1)
逃避tip++
中的优势:
pattern <- sprintf('(^|,)%s(,|$)','tip\\+\\+')
grepl(pattern=pattern,x='some,more,tip++,for,me')
<强>输出:强>
[1] TRUE