SAS 正则

1. 起手式

a = prxmatch( "m/正则/" , 字符串);  m可有可无,只是说明这是匹配。返回目标字符串位置

b  = prxchange( 's/ < / lt /', -1, str ); S必须有,表明这是替换。-1是替换所有符合要求字符,1是替换一个,2是替换2个,如果一个字符串有多个目标字符。

b = prxchange('s/ (\w+) , (\w+)/ $2 $1 /', str);目标字符串调换位置。

data _null_;
input ;
_infile_ = prxchange('s/</&lt;/',2,_infile_);
* 把 < 换成&lt; ; put _infile_; datalines; x
+ y < 15 x < 10 < y y < 11 < y < z ; run; data names; name='Jones, Fred'; output; name='Kavich, Kate'; output; name='Turley, Ron'; output; name='Dulix, Yolanda'; output; run; /* Reverse last and first names */ data ReversedNames; set names; name=prxchange('s/(\w+), (\w+)/$2 $1/', -1, name); put name; run;

 

 

 

 

 

2. 常用规则

 

/ str / 包含str

/ ^str / 以str开头,字符串是整个字符串,而不是字符中某个单词

/ str$ /  以str结尾,字符串是整个字符串,而不是字符中某个单词

/ str /i  忽略大小写

/ \d\d\d / 三位数字

/ \d\d\d? / 两位或三位数字,?让前面的d成为可选。出现零次或一次

/ \d\d\d+ / 三位或更多位数字。出现一次或更多次。

/ \d\d\d* / 连续出现0个或多个。

/ \d{n} / 连续出现n次

/ \d{n,} / 连续出现n次或更多次

/ \d{n,m} / 连续出现n次到m 次

/ a.b / .是匹配一切,acb, aob

/ [1-9] / 匹配1-9

/ A-Z / 匹配A - Z

/ a-z / 匹配 a - z

/ (2|3)\d /  |或,2或3,再加一位数字

/ 2|3\d /  |或,2,或3再加一位数字。3\d是一个整体

/ [^a-e] / 除了 a-e之外的任意字符

/ .* / .匹配任意字符,除换行符之外,.*匹配一切

/  \( / 匹配括号

 

 

\s:用于匹配单个空格符,包括tab键和换行符; 
\S:用于匹配除单个空格符之外的所有字符; 
\d:用于匹配从0到9的数字; 
\w:用于匹配字母,数字或下划线字符; 
\W:用于匹配所有与\w不匹配的字符; 
. :用于匹配除换行符之外的所有字符

 

标记:

i: 忽略大小写

g:全局匹配。prxmatch中不支持。

s:加上s后,.无可限制,啥都匹配,包含换行符

 

posted @ 2021-11-01 22:00  Iving  阅读(803)  评论(0)    收藏  举报