我正在尝试将.json文件解析为SAS。为了处理.json文件中的列表,我想删除[item1,item2,item3,.... item]之间的所有逗号,但保留不在[]内的逗号。

我想我应该可以使用prxchange正则表达式来做到这一点...我可以使它适用于两个项目的列表,但无法弄清楚如何对其进行更改以使用不同数量的列表。

newvariable=prxchange('s/(\[\w+),(\w+\])/$1 $2',-1,oldvariable);

例子:

oldvariable = "{"hospital": "NOP", "drugs": ["penicillin", "ampicillin", "cephalosporin"]}"
newvariable = "{"hospital": "NOP", "drugs": ["penicillin" "ampicillin" "cephalosporin"]}"

oldvariable = "{"hospital": "KOP", "drugs": ["tetracycline"]}"
newvariable = "{"hospital": "KOP", "drugs": ["tetracycline"]}" 


也许有更好的方法来解决这个问题...

最佳答案

有时,处理正则表达式的最简单方法是将其分解为多个步骤。在这种情况下,首先取出数组,然后用空格替换逗号:

data _null_;
oldvariable = '{"hospital": "NOP", "drugs": ["penicillin", "ampicillin", "cephalosporin"]}';
arrayExpr=prxparse( '/\[[^]]+\]/' );
call prxsubstr( arrayExpr, oldvariable, position, length );
put position length;
newvariable=cat(
    substr( oldvariable, 1, position - 1 ),
    prxchange( 's/, / /', -1, substr( oldvariable, position, length ) ),
    substr( oldvariable, position + length )
);
put newvariable;
run;


您原来的正则表达式也有一些问题。在许多正则表达式帮助器站点中this one is my favorite

10-08 05:59