SAS-使用正则表达式/ prxmatch提取8位数字模式

时间:2019-07-02 13:37:47

标签: regex sas

从SAS中的现有字符串中提取格式为yyyymmdd的日期戳的最佳方法是什么?

据我所知,最简单的方法似乎是使用带有prxmatch函数的正则表达式来替换模式中的所有内容。

  • 让我们假设字符串中唯一的8位数字模式是我的日期,因此[0-9]{8}模式就足够了。

这是我用字符串empty替换8位模式(出于可读性)的目的:

data b(keep=have want);

    /* HAVE */
   have = '&libroot_hr./import/sxh3j900/20190702_SXH3J900_DWH_Adresse.txt';
   regexp = 's/[0-9]{8}/empty/';
   times  = -1;  /* -1: replace all occurences */

    /* WANT */
   want = prxchange(regexp, times, have);

   /* Result
       '&libroot_hr./import/sxh3j900/empty_SXH3J900_DWH_Adresse.txt'
   */

run;

如何更改此设置,以便用字符串empty替换所有 9位模式?

1 个答案:

答案 0 :(得分:2)

data b(keep=have want);
   have='&libroot_hr./import/sxh3j900/20190702_SXH3J900_DWH_Adresse.txt';
   re = prxparse("/(\d{8})/"); 
   if prxmatch(re,have) then do;
      want = prxposn(re,0,have);
   end;
run;

如果您只想提取前8位数字。

Here将正则表达式转换为 yyyymmdd 格式。