SAS Regex匹配1-3位数

时间:2012-11-20 22:56:02

标签: regex sas

我正在寻找一个SAS正则表达式来匹配字符串开头的1-3位数字,这样的数字序列后面应该是空格 - 如下所示(string1string2和{ {1}}):

string3

2 个答案:

答案 0 :(得分:3)

只是为了好玩,一些琐碎的非正则表达式解决方案(每个都有弱点/强度取决于你的数据/期望的结果)...我不会在这里查看大部分长度,所以如果你需要消除情况如果你有4位或更多位数(即,如果string1 =“1234 main”将失败),请通过length()添加。

if notdigit(scan(string1,1)) then put 'no match';
if compress(scan(string,1),,'d') ne ' ' then put 'no match';

NOTDIGIT对于这样的事情来说是一个很棒的功能 - 如果你不需要检查4个以上的字符,这可能比正则表达式更快。

另外,建议 - 对于SAS,如果你是9.2或更新版本,你应该这样写你的正则表达式:

rx=prxparse('/^\d{1,3}(?=\s)/o');

o表示编译器只编译一次正则表达式。 (这取代了旧的'retain和if _n_ = 1'方法。)如果你想匹配3位数而不是其他任何东西,你也可能想要使用\ b而不是\ s(即,如果“333”是一个匹配,而不是“333”,并且它可以有一个3宽度变量) - \ s是一个空格字符,而\ b是一个字边界,类似于\ s但包括字符串标记的结尾为好。

答案 1 :(得分:1)

有点不清楚你在寻找什么,但我相信你需要这种正则表达式

^\d{1,3}(?=\s)