PRXPARSE REGEX在此测试数据步骤中未返回所有所需的匹配项

时间:2014-10-31 10:37:23

标签: regex sas

我正在调试一个更大,更复杂的正则表达式,我通过构建一个小规模的正则表达式,以了解我的问题在哪里更好。此测试正则表达式的目的是在我构建的测试数据集中以不区分大小写的方式检测US状态。代码在这里:

data countries;
do i = 1 to 10;
output;
end;
run;

data countries;
set countries;
if i = 1 then state = 'CALIFORNIA';
if i = 2 then state = 'alabama';
if i = 3 then state = 'New York';
if i = 4 then state = 'OHIO';
if i = 5 then state = 'ohio';
if i = 6 then state = 'FLORIDA';
if i = 7 then state = 'georgia';
if i = 8 then state = 'TEXAS';
if i = 9 then state = 'Kansas';
if i = 10 then state = 'MAINE';
run;

data countries;
set countries;
prx_1 = (prxparse("/^(?i:california|new\s+york|maine)$/"));
prx_valid_addr_1 = (prxmatch(prx_1, compress(state))) ;
run;

我遇到的问题是它没有在我的数据中检测到纽约。正则表达式看起来正确的字符串给我。谁能告诉我我做错了什么?

由于

2 个答案:

答案 0 :(得分:0)

尝试使用*代替+。压缩没有参数returns the original string with all spaces removed。然后,+而不是*作为空间倍增器需要在该位置至少存在一个空格。因此,当compress删除空格时匹配失败。

答案 1 :(得分:0)

尝试使用arr代替strip()

stripcompress的文档。

@kums在评论中指出compress()

  

[r] eturns删除了指定字符的字符串   原始字符串。