SAS 在正则表达式中使用 $
SAS Using $ in Regex
我有一大堆 ID,如果它以斜杠和一位或两位数字结尾,我想标记它们。 (/00, /01, /0)
有些 ID 在中间包含斜线,我不想标记。
所以我希望我的结果是:
ID Flag
P-MTP00197854/03 X
P-MTP00197868/02 X
P-MTP00197882/00 X
P-HMF00197730
WI/B09/077094
Q-MTP00197735
Q-HMF00199313/0 X
我希望这个函数能够完成这项工作,但它没有检测到任何东西:
if prxmatch("/\/\d{1,2}$/", ID) then Flag='X';
如果我删除 $ 符号,它会检测到我想要的内容,但它还包括那些中间带有斜杠的 ID,因为它不是从末尾开始的。
我已经在 regex101 上对其进行了测试,它应该可以工作。我在这里遗漏了什么吗?
为防止部分匹配,您可以使用单词边界。为确保右侧不再有 /
,您可以使用正前瞻断言右侧不再出现 /
\/\d{1,2}\b(?=[^\r\n\/]*$)
看到一个regex demo。
或者反之使用负前瞻,断言右侧没有 /
:
\/\d{1,2}\b(?![^\/\r\n]\/)
再看一个regex demo。
我有一大堆 ID,如果它以斜杠和一位或两位数字结尾,我想标记它们。 (/00, /01, /0)
有些 ID 在中间包含斜线,我不想标记。
所以我希望我的结果是:
ID Flag
P-MTP00197854/03 X
P-MTP00197868/02 X
P-MTP00197882/00 X
P-HMF00197730
WI/B09/077094
Q-MTP00197735
Q-HMF00199313/0 X
我希望这个函数能够完成这项工作,但它没有检测到任何东西:
if prxmatch("/\/\d{1,2}$/", ID) then Flag='X';
如果我删除 $ 符号,它会检测到我想要的内容,但它还包括那些中间带有斜杠的 ID,因为它不是从末尾开始的。
我已经在 regex101 上对其进行了测试,它应该可以工作。我在这里遗漏了什么吗?
为防止部分匹配,您可以使用单词边界。为确保右侧不再有 /
,您可以使用正前瞻断言右侧不再出现 /
\/\d{1,2}\b(?=[^\r\n\/]*$)
看到一个regex demo。
或者反之使用负前瞻,断言右侧没有 /
:
\/\d{1,2}\b(?![^\/\r\n]\/)
再看一个regex demo。