3

使用 SAS 9.3 我想提取“。”之间的每个字符串的部分。(点)和点后的'"'(双引号)。例如下面第一行的结果应该是 f2015_cnt_cont_line

      <characteristic abc="[2015].f2015_cnt_cont_line" xxxxxxxx="8129" />
      <characteristic abc="[2015].f2015_dbt_cont_line" xxxxxxxx="8134" />
      <characteristic abc="[2015].f2015_ctl_tot_acct_bal" xxxxxxxx="8133" />
      <characteristic abc="[2015].f2015_cnt_comb_line" xxxxxxxx="8118" />
      <characteristic abc="[2015].f2015_dbt_comb_line" xxxxxxxx="8138" />

有人有我可以使用的例子吗?

谢谢丹

4

4 回答 4

4

与您的模式匹配的正则表达式是\.(.*?)\". 这意味着:找到一个点(一个特殊字符;然后是任何字符(? 使它不“贪婪”,因此它捕获尽可能少的字符);然后是引号。

使用SAS 文档中的这个例子,这样的事情应该可以工作:

data test;
   set _your_data_set;
   retain re;
   if _N_ = 1 then re = prxparse('/\.(.*?)\"/');
   if prxmatch(re, var) then result = prxposn(re, 1, var);
run;

(这假设您的数据位于名为 的变量中var。)

于 2012-06-14T23:07:16.367 回答
3

除了使用 PRX 函数,类似以下的内容可能就足够了:

text=scan(scan(line,2,"."),1,'"');

这假定文本存储在名为 line 的变量中。

于 2012-06-14T21:57:26.657 回答
2

这是一种方法:

inner = SCAN(SUBSTR(line,INDEX(line,'.')+1),1,'"');

内部 SUBSTR 函数跳到第一个点之后的列;外部 SCAN 函数返回由双引号分隔的第一个单词。

于 2012-06-14T21:53:01.913 回答
0

这对我行得通

SUBSTR(
t1.field, 
index(t1.field,'.')+1,
(index(t1.field,'"')-index(t1.field,'.')-1)
)
于 2020-03-04T18:34:25.600 回答