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

PRXPARSE REGEX在此测试数据步骤中未返回所有所需的匹配项,regex,sas,Regex,Sas,我正在调试一个更大、更复杂的正则表达式,通过构建一个小规模的正则表达式来理解我的问题在哪里更好,它的行为并不像预期的那样。这个测试正则表达式的目的是在我构建的测试数据集中检测不区分大小写的美国状态。代码如下: 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 = 'alab

我正在调试一个更大、更复杂的正则表达式,通过构建一个小规模的正则表达式来理解我的问题在哪里更好,它的行为并不像预期的那样。这个测试正则表达式的目的是在我构建的测试数据集中检测不区分大小写的美国状态。代码如下:

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;
我的问题是,它没有在我的数据中检测到纽约。在我看来,正则表达式对于该字符串是正确的。谁能告诉我我做错了什么


谢谢

尝试使用
*
而不是
+
。无参数压缩。然后,作为空间乘法器的
+
而不是
*
要求在该位置至少存在一个空间。因此,当compress删除空格时,匹配失败。

尝试使用
strip()
而不是
compress()

和的文档

正如@kums在评论中指出的,
compress()

[r] eturn从中删除指定字符的字符串 原始字符串


@vks你好,谢谢你的回复。不幸的是,这也没有起作用。但是您使用的正则表达式确实可以找到
加利福尼亚州
缅因州
,对吗?压缩(州)
做什么?它能把他们连在一起吗?在这种情况下,删除
^
$
锚定。Does
prx_1=(prxparse(“/^(?i:california | new\s*york | maine)$/”)工作?仅供参考:
压缩