问题
我需要使用正则表达式从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
替换字符串,但我错过了文件的名称。我在替换中尝试了$
的不同值,但没有成功。
问题
这次正则表达式替换我做错了什么?
答案 0 :(得分:3)
你快到了。只是对错误的对象进行分组:
file=prxchange('s/^.*\d{2}(\w+\.zip).*$/$1/',-1, line);