R 正则表达式帮助:Perl 的修饰符 + 前瞻性过于激进

R regex help: Perl s modifier + lookahead too aggressive

我正在尝试使用 R 的 gsub("regexp", "", string, perl=T) 删除两个给定子字符串之间的所有字符(包括换行符)(即用空字符串替换所有匹配项)。

到目前为止,我所拥有的是正则表达式 (?<=A)(?s:.)+(?=B),我在其中使用 s 修饰符来使 . 也匹配换行符。问题是,当前瞻 B 多次出现时,我只想删除 A 和第一个 B 之间的任何内容:

我有A remove \r\n this B but leave this B

我要AB but leave this B

但到目前为止我得到的是 AB

如何修改正则表达式,使前瞻在第一次出现时停止?

让它不贪心试试这个:

(?<=A)(?s:.)+?(?=B)

这是一个特殊情况,使用 Dot-All、点和量词应该
不被使用。读起来很混乱,没有传达它的真正意图。

(?<=A)[^B]+(?=B)