楼主: 若水烟寒
2209 8

[问答] 求问SAS PRX中的一个字符匹配问题 [推广有奖]

  • 3关注
  • 9粉丝

已卖:840份资源

博士生

8%

还不是VIP/贵宾

-

威望
0
论坛币
1391 个
通用积分
33.0863
学术水平
14 点
热心指数
18 点
信用等级
12 点
经验
2716 点
帖子
183
精华
0
在线时间
176 小时
注册时间
2011-5-11
最后登录
2025-6-4

楼主
若水烟寒 发表于 2012-12-8 18:52:48 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
参看下面的代码,想问一下Carol Echols中的Echols为什么匹配对应的last变量?([^\s]+\s+)这个匹配到底表示的是啥意思……求高人解答,谢谢!


data old;
   input name $60.;
   datalines;
Judith S Reaveley
Ralph F. Morgan
Jess Ennis
Carol Echols
Kelly Hansen Huff
Judith
Nick
Jones
;

data new;
   length first middle last $ 40;
   re1 = prxparse('/(\S+)\s+([^\s]+\s+)?(\S+)/o');
   re2 = prxparse('/(\S+)(\s+)([^\s]+\s+)(?)(\S+)/o');
   set old;
   id1=prxmatch(re1, name);
   id2=prxmatch(re2, name);
   if id1 then
      do;
         first = prxposn(re1, 1, name);
         middle = prxposn(re1, 2, name);
         last = prxposn(re1, 3, name);
      end;
   if id2 then test=prxposn(re1, 4, name);
   put test=;
run;


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:PrxMatch RXPARSE Middle length Morgan 克里斯蒂娜

沙发
webgu 发表于 2012-12-9 10:32:34
确切说,与middle匹配的是([^\s]+\s+)? ,而不是([^\s]+\s+)。
?表示([^\s]+\s+)也就是中间名可以出现1次,也可以不出现。所以Echols被算做last了。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
若水烟寒 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

藤椅
老师她摸我 发表于 2012-12-9 13:33:19
Carol Echols中的Echols匹配对应的last变量,是因为语句last = prxposn(re1, 3, name);指定了capture buffer number(the number of capturing parentheses in the regex)为3。另:非正则表达式方法
  1. data new;
  2.         set old;
  3.         array newname {*} $8. first middle last;
  4.         nword=countw(name);
  5.         if nword ge 2 then do;
  6.                 i=1;
  7.                 do until(scan(name,i,' ')=' ');
  8.                         newname(i)=scan(name,i,' ');
  9.                         i+1;
  10.                 end;
  11.         end;
  12.                 else delete;
  13.         if nword=2 then do;
  14.                 newname(3)=newname(2);
  15.                 newname(2)=' ';
  16.         end;
  17.         drop name nword i ;
  18. run;
复制代码


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
若水烟寒 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

欢迎加入SAS群:144839730-蜗牛

板凳
若水烟寒 发表于 2012-12-9 13:58:44
webgu 发表于 2012-12-9 10:32
确切说,与middle匹配的是([^\s]+\s+)? ,而不是([^\s]+\s+)。
?表示([^\s]+\s+)也就是中间名可以出现1次, ...
啊,那请问这个匹配几次是怎么看出来的呢?还有那个括号的含义怎么理解呢?谢谢!按照这个意思之前的第一次匹配是算作这个吗(\S+)\s+?

报纸
若水烟寒 发表于 2012-12-9 14:02:26
老师她摸我 发表于 2012-12-9 13:33
Carol Echols中的Echols匹配对应的last变量,是因为语句last = prxposn(re1, 3, name);指定了[ ...
谢谢嘞~但是如果指定prxposn(re1, 2, name);是怎样的呢?是不是跟楼上一个意思滴……?

地板
webgu 发表于 2012-12-9 14:10:55
若水烟寒 发表于 2012-12-9 13:58
啊,那请问这个匹配几次是怎么看出来的呢?还有那个括号的含义怎么理解呢?谢谢!按照这个意思之前的第一 ...
+,出现1次或多次,
? 出现0次或1次,
()是创建分组,一个括号一个capture buffer 。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

7
若水烟寒 发表于 2012-12-9 15:30:55
webgu 发表于 2012-12-9 14:10
+,出现1次或多次,
? 出现0次或1次,
()是创建分组,一个括号一个capture buffer 。
那请问括号外面的是算到匹配分组里的吗?([^\s]+\s+)?比如括号外面这个“?”

8
webgu 发表于 2012-12-9 15:41:14
?的作用是前面的字符出现0次或1 次,有括号的作用于整个括号。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

9
若水烟寒 发表于 2012-12-9 17:08:31
webgu 发表于 2012-12-9 15:41
?的作用是前面的字符出现0次或1 次,有括号的作用于整个括号。
理解啦,谢谢^^~

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-7 04:26