3

使用 PL/SQL,我如何删除句子,除了第一次出现的以单词开头的句子This product?假设每个句子都以句点 ( .) 结尾,并且每个句子都以大写字母开头;例如:

 v_desc varchar2(500);
 v_desc := 'This product is used. Product may make you wealthy. This product may appear red. This product is not new.';

我的尝试:

 v_desc := regexp_replace(v_desc,'This product*{2,}','') ;
 v_desc := regexp_replace(v_desc,'This product*{2,}*','') ;

期望的结果

v_desc := 'This product is used. Product may make you wealthy.';
4

1 回答 1

4

试试这个:

 v_desc := regexp_replace(v_desc,'[^^](This product).*[.]', '') ;

这是分解:

[^^] = Not the beginning of the line
(This product).*[.] = Searching for all instances of "This product" followed by a "."

这将最终搜索不在行首的“此产品...”的所有实例。

*评论后编辑

那么你想要的是正面的样子(?<=)。它应该如下所示:

 v_desc := regexp_replace(v_desc,'(?<=(This product).*)(This product).*[.]', '') ;

分解:

(?<=(This product).*) = Positive lookbehind.  
(This product).*[.] = What is being searched for

如果表达式“This product ...”在它之前,它只会触发下一个值为真。这将防止“此产品”的首次出现出现在要替换的值中。

我想指出,并非所有正则表达式的植入都支持前瞻和后视。我不知道 PL/SQL 的细节,所以我不能保证这会奏效。当我在Regex Hero上进行测试时,它确实有效。

于 2012-10-09T19:03:13.613 回答