SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 998|回复: 4
打印 上一主题 下一主题

如何把一字符中的所有标点符号压缩掉

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-10-13 22:27:31 | 只看该作者

如何把一字符中的所有标点符号压缩掉

字符串很长,里面有各种各样的标点符号,只想保留字母,数字,和中文字符。感觉很复杂..
求教高手,问题应该如何处理呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-10-14 08:46:47 | 只看该作者

Re: 如何把一字符中的所有标点符号压缩掉

试试正则表达
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-10-14 10:54:09 | 只看该作者

Re: 如何把一字符中的所有标点符号压缩掉

[quote="yugao1986":j0ewzesj]试试正则表达[/quote:j0ewzesj]
正则好像也不好把中文字符分开吧...之前用过正则,没弄出来,还望大侠指教下...
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-10-15 12:25:11 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2012-7-25 14:47:55 | 只看该作者

Re: 如何把一字符中的所有标点符号压缩掉

data _null_;
    text='a%&,madsf152./,';
    new=compress(text,,'p');
    put new;
run;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-4 00:18 , Processed in 0.067745 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表