问题
我需要使用正则表达式从 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
,但我缺少文件名。我尝试过 $
的不同值在更换,但没有成功。
问题
我用这个正则表达式替换做错了什么?
最佳答案
你就快到了。只是对错误的对象进行分组:
file=prxchange('s/^.*\d{2}(\w+\.zip).*$/$1/',-1, line);
关于regex - 使用正则表达式提取 SAS 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091863/