使用正则表达式在SAS中提取子字符串

时间:2016-03-18 18:33:34

标签: regex string sas substring

问题

我需要使用正则表达式从HTML中提取特定字符串。字符串的名称始终遵循以下模式:

<2 digits><any number of characters>.zip

我想一步到位。

我有什么

data have;
    infile datalines truncover;
    input Line $ 1-500;
    datalines;
"<td><a href=""Location/01data.zip"">2001</td>"
"<td><a href=""Location/02moarstuff.zip"">2002</td>"
;
run;

我需要什么

HTML代码中文件的名称和扩展名。

File               Line                                                   
01data.zip         "<td><a href=""Location/01data.zip"">2001</td>"         
02moarstuff.zip    "<td><a href=""Location/02moarstuff.zip"">2002</td>"    

我尝试了什么

我尝试使用以下正则表达式:

/\d+\w+(\.zip)/

使用http://regexr.com/进行测试后,表达式确实找到了正确的字符串。然后,我尝试使用page 3 of this SAS regex whitepaper上的技术,使用prxchange()函数删除除所需子字符串之外的所有内容:

data want;
    length File $25.;
    set have;

    file=prxchange('s/^.*\d+\w+(\.zip).*$/$1/',-1, line);
run;

这会让我:

File    Line                                                   
.zip    "<td><a href=""Location/01data.zip"">2001</td>"         
.zip    "<td><a href=""Location/02moarstuff.zip"">2002</td>" 

最终用.zip替换字符串,但我错过了文件的名称。我在替换中尝试了$的不同值,但没有成功。

问题

这次正则表达式替换我做错了什么?

1 个答案:

答案 0 :(得分:3)

你快到了。只是对错误的对象进行分组:

file=prxchange('s/^.*\d{2}(\w+\.zip).*$/$1/',-1, line);