SAS prxparse提取字符串

时间:2015-03-30 18:36:49

标签: regex sas

我想提取两个词" blood"和"损失"在最接近子串的范围内。我有下面的代码,但ID 4不起作用。我希望得到子串"失血"而不是"血液但是失血"。

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;

1 个答案:

答案 0 :(得分:1)

如果需要忽略血液 s ,则需要进行非常小的更改。在正则表达式的第一部分中,在血液和之间添加一个空格,它将尝试匹配单词blood。下面是替换prxparse语句。

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

根据更新后的评论,当字符串像“血腥失血”时匹配字符串“失血”,那么负向前瞻可以帮助。

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