给定这个向量:

ba <- c('baa','aba','abba','abbba','aaba','aabba')'

我想将每个单词的最终 a 更改为 i baaaba 除外。

我写了以下行...
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/

10-12 21:51