给定这个向量:
ba <- c('baa','aba','abba','abbba','aaba','aabba')'
我想改变最后的结局a
每个单词到i
except baa
and aba
.
我写了以下行...
gsub('(?<=a[ab]b{1,2})a','i',ba,perl=T)
但被告知:PCRE 模式编译错误“lookbehind 断言不是固定长度”,位于“)a”.
我环顾四周,显然 R/Perl 只能向前查找可变宽度,而不能向后查找。有解决这个问题的方法吗?谢谢!
您可以使用lookbehind替代方案\K
反而。此转义序列会重置报告的匹配的起点,并且不再包含任何先前消耗的字符。
Quoted — rexegg http://www.rexegg.com/regex-php.html
\K 和后向查找之间的主要区别在于,在 PCRE 中,后向查找不允许您使用量词:您查找的长度必须是固定的。另一方面,\K 可以放在模式中的任何位置,因此您可以在 \K 之前随意使用任何您喜欢的量词。
在上下文中使用它:
sub('a[ab]b{1,2}\\Ka', 'i', ba, perl=T)
# [1] "baa" "aba" "abbi" "abbbi" "aabi" "aabbi"
避免环顾四周:
sub('(a[ab]b{1,2})a', '\\1i', ba)
# [1] "baa" "aba" "abbi" "abbbi" "aabi" "aabbi"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)