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

时间:2015-08-05 16:13:57

标签: regex r pcre

我正在尝试使用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

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

2 个答案:

答案 0 :(得分:3)

让它非贪婪试试这个:

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

答案 1 :(得分:2)

这是使用Dot-All,点和量词应该为的特定情况 不被使用。对它的阅读令人困惑,并没有传达其真正的意图。

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