SAS使用PRXPARSE提取两指定字符串间内容的语法问题
问题分析
你的代码存在以下几处错误:
- 正则表达式存在多余转义:你在
alone:前加了\(,这会匹配字面量左括号(,但示例文本中alone:前没有左括号,无法匹配到目标文本。 - 正则语法不完整:PRXPARSE的正则规则需要完整包裹在
/分隔符内,你写的正则末尾只有\./),缺少了结束的/,属于语法错误。 - 捕获组索引错误:你需要提取的是
alone:和句号之间的内容,对应原正则里的第二个捕获组(第一个捕获组是alone:本身,第三个是末尾的句号),你当前调用prxposn时指定索引为1,只会拿到alone:,拿不到目标内容。 - 缺少retain声明:如果不写
retain re;,正则变量re只会在第一行观测时被赋值,后续观测会被自动重置为缺失值,导致匹配失效。
修改后代码
data parse_data; set data; BY num; retain re; if _N_=1 then re = PRXPARSE("/alone: (.*?)\./"); if prxmatch(re, text) then new_text=prxposn(re, 1, text); run;
代码说明
- 优化了正则结构:去掉多余转义,调整捕获组逻辑,只把需要提取的中间内容放在第一个捕获组里,不用额外捕获无意义的
alone:和末尾句号,简化了调用逻辑。 - 新增
retain re语句,保证正则表达式对象在所有观测中都可以正常使用。 - 调整
prxposn的索引为1,直接获取目标内容,示例文本执行后new_text的值就是你需要的Osteoporosis。
内容的提问来源于stack exchange,提问作者the-local-dreamer
相关产品推荐
相关产品推荐

