2015-03-30 38 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