2015-03-30 251 views
0

我希望在最接近子字符串的位置提取兩個單詞「blood」和「loss」。我有以下代碼,但ID 4無法使用。我希望得到子串「失血」,而不是「血液,但失血」。需要SAS prxparse提取字符串

data test; 
    infile datalines truncover; 
    input id $2. string $80.; 
    datalines; 
1 there is one blood something loss 
2 no something else here 
3 three blood loss again blood loss can not believe loss of blood 
4 two bloods but blood loss 
; 
run; 


data test1; 
    set test; 
    rx=prxparse("/blood.*?loss|loss.*?blood/i"); 
    start=1; 
    stop =length(trim(string)); 
    do until (p=0); 
    call prxnext(rx,start,stop,trim(string),p,l); 
    if p>0 then do; 
     sub=substr(string,p,l); 
     output; 
    end; 
    end; 
run; 
+3

請不要在問題中包含姓名或電子郵件(並且電子郵件不應該在這裏可見,這很容易被垃圾郵件發送者竊取)。 – Joe 2015-03-30 18:56:05

+0

你想匹配「血液」而不是「血液」,或者「血液」是否匹配,如果它確實是最接近的匹配? – Joe 2015-03-30 18:57:55

+0

請更改「接近」,更新您的問題。 – 2015-03-30 19:03:20

回答

1

變化非常小,如果被忽略血小號需要。在血液和之間增加一個空格。在正則表達式的第一部分,它會嘗試匹配單詞blood。以下是替換prxparse聲明。

rx=prxparse("/blood .*?loss|loss.*?blood/i"); 

按照更新的評論,匹配字符串「失血」的字符串時,就像是「血的東西失血」,那麼負前瞻可以提供幫助。

prxparse("/blood (.(?!blood))*?loss/i") 
+0

謝謝,Sushil,您的回答。實際上,有時候它可能是一個像「血液失血」這樣的字符串。我希望得到提取「失血」,而不是「血液失血」。有任何想法嗎?感謝百萬 – 2015-03-30 20:49:58

+0

我提供了一個新的正則表達式匹配你提到的案例 – sushil 2015-03-31 15:57:52

+0

Sushil,你是一個天才。它像一個魅力。向你致敬。 – 2015-03-31 19:41:39