regex - 使用正则表达式提取 SAS 中的子字符串

标签 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 ,但我缺少文件名。我尝试过 $ 的不同值在更换,但没有成功。

问题

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

最佳答案

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

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

关于regex - 使用正则表达式提取 SAS 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091863/

相关文章:

sas - 哪个informat语句可以读取sas中的 "yyyymmdd hh:mm:ssAM"日期

javascript - 如何在 JavaScript 中替换 ASCII 码 (alt+207)?

regex - HTML5 模式排除词

regex - Nginx 为 CSS/JS 文件提供 403 错误

java - 具有捕获组问题的正则表达式量词

c - 当 2 个字符串相等时,strcmp 返回 1,为什么?

Python从列表中删除相同的字符

Java GUI 按钮不会将字符串打印到界面

sas - 数据清理: processing extra if statements vs performing extra assignments

SAS:PROC FREQ 自动组合?