我有以下宏变量:
$man 2 msgctl
我需要将%let text = abc\pqr{work};
替换为\
,将\\
替换为{
,将\{
替换为}
的正则表达式。
我试过的代码会出错。
\}
此外,如果文字是“BOLD \ ITALIC \ ITALICBOLD \ BOLDITALIC \ B \ I \ IB \ BI”,我需要将其转换为“\ b \ i \ ib \ bi \ b \ i \ ib \ bi ”。
抱歉没有提供我最初尝试的代码。
提前致谢。
答案 0 :(得分:1)
对于您的第一个问题,您应该将每个模式分成单独的PRXCHANGE。我不认为PRXCHANGE允许OR操作数。如果运行此代码,它将适用于您:
%let text = abc\pqr{work};
data _null_;
var=prxchange("s/\\/\\\\/",-1,"&text");
var=prxchange("s/\{/\\\{/",-1,var);
var=prxchange("s/\}/\\\}/",-1,var);
put var;
run;
同样的原则适用于您的第二个查询:
%let text = BOLD\ITALIC\ITALICBOLD\BOLDITALIC\B\I\IB\BI;
data _null_;
var=prxchange("s/BOLD/b/",-1,"&text");
var=prxchange("s/ITALIC/i/",-1,var);
var=lowcase(var);
put var;
run;
Regads, 瓦西里