SAS替换文本中没有空格的特定模式

时间:2017-07-28 20:05:57

标签: regex sas

例如我的文字就像这样 - "我有这些代码c 6780,u 6780,c0555"。输出当前给出的是 - "我有这些代码([cu] [0-9o] [0-9a-z] {3}),([cu] [0-9o] [0-9a -z] {3}),c0545"。但我期待的是 "我有这些代码c6780,u6780,c0555"。 我试过这段代码。

DATA REPLACE_PAT;
set text;
IF _N_ =1 THEN PATTERN = PRXPARSE ("s/([cu]\s[0-9o][0-9a-z]{3})/([cu][0-9o][0-9a-z]{3})/");
RETAIN PATTERN;
CALL PRXCHANGE(PATTERN, -1, text); 
run;

如何更改代码才能实现此目标?

1 个答案:

答案 0 :(得分:1)

您需要将要保留的内容(而不是整个内容)包含在内以创建捕获组,然后使用$1 $2引用捕获组。

DATA REPLACE_PAT;
  set text;
  IF _N_ =1 THEN PATTERN = PRXPARSE ("s/([cu])\s([0-9o][0-9a-z]{3})/$1$2/");
  RETAIN PATTERN;
  CALL PRXCHANGE(PATTERN, -1, text); 
run;

您还可能希望在最终o之后查看/选项,以避免在 n = 1位时执行愚蠢行为。