2012-10-09 50 views
2

使用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.'; 

回答

3

試試這個:

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 "." 

這將最終搜索不在行首的所有「This product ...」實例。

*註釋

後編輯,然後你想要的是背後(?<=)正面看。它應該是這樣的:

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

擊穿:

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

它只會觸發下一個值true,如果表達「這個產品......」是前。這將防止第一次出現「本產品」出現在要被替換的值中。

我想指出的是,所有植入的正則表達式並不支持lookahead和lookbehinds。我不知道PL/SQL的細節,所以我不能保證這會起作用。它在我測試Regex Hero時確實有效。

+0

這很接近,當我分析你的建議時,我意識到我想保持'第一次發生'而不是第一句話。如果v_desc開始'產品可能會冒泡。這個產品被使用..'我只是'產品可能泡沫'。我怎樣才能調整這一點,以保持開始「This product ...」的句子的第一次出現。 – zundarz

相關問題