匹配字符串,但前提是没有其他字符串

时间:2014-07-31 10:52:16

标签: regex r grep

说我有字符串向量:

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>}之前之前匹配?

2 个答案:

答案 0 :(得分:15)

负面观察(R中的PCRE)

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。