说我有字符串向量:
v = c("SPX.Close", "AAPL.Low", "Lo", "LowPrice", "PriceLow", "low")
如何编写匹配所有字符串的正则表达式,类似于短语" low"?
grep("lo", v, ignore.case=T) # 1 2 3 4 5 6 7
这也匹配了第一个字符串,这是我不想要的。
如果lo
仅在<{1>}之前之前匹配?
答案 0 :(得分:15)
R使用支持lookbehind的PCRE引擎。这样做:
grep("(?<!c)lo", subject, perl=TRUE, value=TRUE, ignore.case=TRUE);
负面的后视(?<!c)
断言当前位置之前的内容不是c
选项2:检查大写字母,打开案例不敏感内联
根据您的意见,更通用的选择是断言lo
前面没有大写字母:
grep("(?<![A-Z])(?i)lo", subject, perl=TRUE, value=TRUE);
对于此选项,我们使用内联修饰符(?i)
来启用不区分大小写,但只有在我们检查到没有大写字母位于我们的位置之后。
<强>参考强>
答案 1 :(得分:3)
你可以使用负面的后视:
grep("(?<!C)lo", v, ignore.case=T, perl=T)
这将确保字符串前面没有C。