我想提取两个词" 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;
答案 0 :(得分:1)
如果需要忽略血液 s ,则需要进行非常小的更改。在正则表达式的第一部分中,在血液和。之间添加一个空格,它将尝试匹配单词blood。下面是替换prxparse语句。
rx=prxparse("/blood .*?loss|loss.*?blood/i");
根据更新后的评论,当字符串像“血腥失血”时匹配字符串“失血”,那么负向前瞻可以帮助。
prxparse("/blood (.(?!blood))*?loss/i")