给定这个向量:
ba <- c('baa','aba','abba','abbba','aaba','aabba')'
我想将每个单词的最终
a
更改为 i
baa
和 aba
除外。我写了以下行...
gsub('(?<=a[ab]b{1,2})a','i',ba,perl=T)
但被告知:PCRE 模式编译错误 ')a' 处的后视断言不是固定长度。
我环顾四周,显然 R/Perl 只能向前看可变宽度,而不是向后看。这个问题有什么解决方法吗?谢谢!
最佳答案
您可以改用lookbehind 替代\K
。此转义序列会重置所报告匹配项的起点,并且不再包含任何先前使用的字符。
引用 — rexegg
在上下文中使用它:
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"
关于regex - R:可变宽度后视的解决方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29308348/