SAS中文论坛

标题: 如何把一字符中的所有标点符号压缩掉 [打印本页]

作者: shiyiming    时间: 2011-10-13 22:27
标题: 如何把一字符中的所有标点符号压缩掉
字符串很长,里面有各种各样的标点符号,只想保留字母,数字,和中文字符。感觉很复杂..
求教高手,问题应该如何处理呢?
作者: shiyiming    时间: 2011-10-14 08:46
标题: Re: 如何把一字符中的所有标点符号压缩掉
试试正则表达
作者: shiyiming    时间: 2011-10-14 10:54
标题: Re: 如何把一字符中的所有标点符号压缩掉
[quote="yugao1986":j0ewzesj]试试正则表达[/quote:j0ewzesj]
正则好像也不好把中文字符分开吧...之前用过正则,没弄出来,还望大侠指教下...
作者: shiyiming    时间: 2011-10-15 12:25
标题: Re: 如何把一字符中的所有标点符号压缩掉
[code:1qq3y5b7]data want;
set your;
length flag $30;
if anypunct(_char_); *只对包含有标点的字符才接着执行下边的操作,否则系统陷入死循环;
last_pos=lengthn(_char_)-anypunct(reverse(_char_));        *直接定位最后一个标点的位置,若最后字符为标点符号,可直接取字符字符的逻辑长度,否则也会陷入死循环;
n1=anypunct(_char_); *第一个标点符号的位置;
n2=notpunct(_char_,n1+1); *紧挨着n1处标点符号后的第一个非标点字符的位置;
len_p=n2-n1; *标点符号的长度;
punct=substrn(_char_,n1,len_p);        *提取n1处开始,长度为len_p的标点符号;
flag=punct;        *记录标点符号;
do while(n2<last_pos and n1<last_pos); *提取所有的字符_char_中的标点符号并记录在flag中;
    n2=notpunct(_char_,n1+1);
    len_p=n2-n1;
    punct=substrn(_char_,n1,len_p);
    flag=trimn(flag)||strip(punct);
    n1=anypunct(_char_,n2);
end;
compress=compress(_char_,quote(strip(flag))); *对flag中记录的所有标点符号进行压缩处理;
run;[/code:1qq3y5b7]
作者: shiyiming    时间: 2012-7-25 14:47
标题: Re: 如何把一字符中的所有标点符号压缩掉
data _null_;
    text='a%&,madsf152./,';
    new=compress(text,,'p');
    put new;
run;




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2