SAS使用正则表达式查找路径

时间:2015-07-10 14:25:15

标签: regex sas

我在变量中有一个路径,现在我想匹配路径(使用perl)。

我的问题是,我不知道路径有多少个文件夹,以及我如何匹配表达式。

示例,其中包含路径的一些文本:

blablatext....
%include '/data/..../programm.sas';
/*.... is symbolic for an unknown number of folders
 first slash is optional*/
blablatext...

到目前为止,我所做的是:

pattern = PRXPARSE("s/%include +\'(\/*\w+\/)\'/$1 /");

但这只匹配%include' / data /'或%包括'数据/'。 那么我如何构建一个与字符串中未知数量的文件夹和斜杠匹配的表达式?

(请原谅这个问题是否微不足道,但我很久没有使用正则表达式了,今天也找不到好的解决方案)

编辑: 此外,我想有一个解决方案,只返回Programname,没有路径,在这种情况下只是programm.sas或只有programm。

2 个答案:

答案 0 :(得分:1)

尝试

pattern = PRXPARSE("/%include '.+\/([^']+)';/gi");

demo here

答案 1 :(得分:0)

如果您确实拥有完整路径名,则可以使用此宏(或将其转换为class SyncAudit { public string Server { get; set; } public string Database { get; set; } public DateTime SyncTime { get; set; } public int Successful { get; set; } } 函数):

fcmp

示例:

%macro path(iFileName=);
  %sysfunc(prxchange(s/(.*[\\|\/])[^\\|\/]+$/$1/,1,&iFileName))
%mend;
  

C:\ Program Files \ SASHome \ SASFoundation \ 9.3 \

%put %path(iFileName=%sysfunc(getoption(config)));
  

\\ pc12345 \ sasdev \

%put %path(iFileName=\\pc12345\sasdev\);
  

\\ pc12345 \

%put %path(iFileName=\\pc12345\sasdev);
  

C:\

%put %path(iFileName=c:\something.txt);
  

的/ usr /等/

%put %path(iFileName=/usr/etc/x.txt);
  

的/ usr /等/

以下是完整代码,包括对正则表达式的解释:

%put %path(iFileName=/usr/etc/);