我有一个 SAS 数据集,其中包含多个观察结果,单个变量中包含来自 PDF 的文本。
我需要使用以下模式解析字符串以进行进一步处理。
txt="ABCCXX.DEFG hijkj LMNO = YYYYYYYY"
由于我对 PRX 函数的了解有限,我只能得出以下结论。显然,它不处理我上面提到的 'b' 和 'e'。
data want;
set have;
length var8 $200;
search8 = prxparse("/[A][B][C][C][A-Z][A-Z][.][D][E][F][G][\s][h][i][j][k][j][\s][L][M][N][O][\s][=][\s][A-Z][A-Z][A-Z][A-Z][A-Z][A-Z][A-Z][A-Z]/oi");
if prxmatch(search8,txt) then do;
call prxsubstr(search8,txt,start,length);
if start>0 then var8=substr(txt,start,length);
end;
run;
当只有一个字符时,你不需要
[]
字符类。
您将需要一个带有
()
捕获组用于提取和 {a,b}
用于出现范围的模式。可以通过 PRXNEXT
在循环中多次应用该模式。
例子:
data work.have;
length line $256;
input;
line = _infile_;
datalines4;
txt="ABCCPQ.DEFG hijkj LMNO = 123456AB"
txt="ABCCVW.DEFG hijkj LMNO = ZZZZZZZZ"; txt="ABCCXY.DEFG hijkj LMNO = 12"
;;;;
data want;
rx = prxparse('m/"ABCC([A-Z]{2})\.DEFG hijkj LMNO = ([A-Z0-9]{1,8})"/');
set work.have;
length found $256;
start = 1;
stop = length(line);
do index = 1 by 1;
call prxnext(rx, start, stop, line, pos, length);
if pos = 0 then leave;
found = substr(line, pos, length);
xx = prxposn(rx,1,line);
yy = prxposn(rx,2,line);
put pos= found= xx= yy=;
end;
run;
会记录
pos=5 found="ABCCPQ.DEFG hijkj LMNO = 123456AB" xx=PQ yy=123456AB
pos=5 found="ABCCVW.DEFG hijkj LMNO = ZZZZZZZZ" xx=VW yy=ZZZZZZZZ
pos=46 found="ABCCXY.DEFG hijkj LMNO = 12" xx=XY yy=12