Good Afternoon, I am trying to pull specific information based on a pattern shown below. The code is shown below. I have tested my regular expressions in other environments and they worked without issue. I believe the issue has something to do with my lack of understanding in SAS. My idea was to pull the required information from the end of each line (that is the reason I am using an end of line marker in RegEx) for each applicable observation and then concatenate as needed. However, when I tried to use that method outside of my loops it would always pull the first observation and then continue adding data onto the end of the string. When I used this RegEx inside the loops it pulled the very last piece of data that I wanted, but it wouldn't pull earlier iterations (In the example data I posted at the bottom of this message it would pull the 2nd highlighted portion of line 3, but nothing from line 2). data test;
length text $32767;
retain text '';
infile msghtml flowover dlmstr='//' end=last;
input;
text=cats(text,'~',_infile_);
patternID1 = prxparse("/,Trans,.*?,Trans,/s");
patternID2 = prxparse('/^(~)([0-9]*\.[0-9]+),(Trans),(\w+),(\w+)/');
patternID3 = prxparse('/(?<=\d{2}\.\d{4},Rec,DATATYPE,(\w){8}\s(\w){2})(\s\w\w)+\s+$/');
if prxmatch(patternID1, text) then do;
text = substr(text,1,length(text)-length(_infile_)-1);
/* Tried placing RegEx here with end of line anchors, did not give desired result */
if prxmatch(patternID2, text) then do;
Match_2=prxmatch(patternID2, text);
Match_3=prxmatch(patternID3, text);
Buffer_Msg_Trans = prxposn(patternID2, 0, text);
Buffer_Msg_Trans1 = prxposn(patternID2, 2, text);
Buffer_Msg_Trans2 = prxposn(patternID2, 3, text);
Buffer_Msg_Trans3 = prxposn(patternID2, 4, text);
Buffer_Msg_Trans4 = prxposn(patternID2, 5, text);
Buffer_Msg_3 = prxposn(patternID3, 0, text);
end;
text=cats('~',_infile_);
end;
/* Tried placing code here with end of line anchors, did not give desired results */
run; I would like the following string to be the end result: 37 46 01 80 11 00 01 02 7A 00 4F FF OR 1) 37 46 01 80 11 00 2) 01 02 7A 00 4F FF (So then I can easily concatenate afterwards) String that is currently in my 'text' column (bold portions contain the data that I want to keep: 1) ~68.1626,Trans,DATATYPE,0601 2) ~68.1626,Trans,DATATYPE,0601~68.1809,Rec,DATATYPE,29EEF98A 10 37 46 01 80 11 00 6A 3) ~68.1626,Trans,DATATYPE,0601~68.1809,Rec,DATATYPE,29EEF98A 10 37 46 01 80 11 00 6A~68.1855,Rec,DATATYPE,29EEF98A 27 01 02 7A 00 4F FF FF 4) ~69.2385,Trans,DATATYPE,0602 Any help or advice would be greatly appreciated. Thank you for your time.
... View more