全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2146 8
2012-12-08
参看下面的代码,想问一下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;


二维码

扫码加我 拉你入群

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

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

全部回复
2012-12-9 10:32:34
确切说,与middle匹配的是([^\s]+\s+)? ,而不是([^\s]+\s+)。
?表示([^\s]+\s+)也就是中间名可以出现1次,也可以不出现。所以Echols被算做last了。
二维码

扫码加我 拉你入群

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

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

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。另:非正则表达式方法
复制代码


二维码

扫码加我 拉你入群

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

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

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);是怎样的呢?是不是跟楼上一个意思滴……?
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群