对于地址数据,是否有人对如何在这些记录的数字位中的特殊字符周围去除空格有任何想法?例如,对于第三条记录,我希望使用“ 44/95”而不是“ 44/95”。 我要对所有“ /”,“-”,“ |”执行的特殊字符和“,”。 我猜想使用正则表达式是最好的方法,但是我想不起来怎么做。
data addresses1;
infile datalines ;
input @1 address $35. ;
format address $50.;
datalines;
26 32-50 CENTRE DANDENONG ROAD
9 /93-95 DANDENONG ROAD EAST
44 / 95 OUTER CRESCENT
17| 21-25 PARKHILL DRIVE
run;
我尝试了类似以下代码的方法,但是没有用。有人可以指出我正确的方向吗?
data addresses2;
set addresses1;
format fixed_address fixed_address2 $255.;
address=strip(address);
fixed_address2=compbl(strip(prxchange("s/(?<=[\|.\(\)\{\}\-\:\s\*\;\.\#\&\_\/\\]) +(?=\[\|.\(\)\{\}\-\:\s\*\;\.\#\&\_\/\\])/$1/",-1,strip(fixed_address))));
run;
答案 0 :(得分:1)
我为您制作了RegEx,它应该可以工作:
\S*( ?(?![/|,-])).*(?<![[/|,-])
它选择零个或多个非空白,然后选择一个空格,其后不跟您的任何字符,然后选择一个或多个任何字符,确保前一个字符不是您的任何字符。这不是很优雅,您将不得不剥掉空白的机器。