Regex SAS正则表达式匹配1-3位数字

Regex SAS正则表达式匹配1-3位数字,regex,sas,Regex,Sas,我正在寻找一个SAS正则表达式来匹配字符串开头的1-3位数字,这样的数字序列后面应该有空格-如下所示(string1,string2和string3): 这是有点不清楚你在寻找什么,但我相信你需要这个正则表达式模式 ^\d{1,3}(?=\s) 这是有点不清楚你在寻找什么,但我相信你需要这个正则表达式模式 ^\d{1,3}(?=\s) 为了好玩,有几个简单的非正则表达式解决方案(根据您的数据/期望的结果,每个解决方案都有缺点/优点)。。。我在这里不检查大多数数字的长度,因此如果需要消除有4个

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


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

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

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

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

为了好玩,有几个简单的非正则表达式解决方案(根据您的数据/期望的结果,每个解决方案都有缺点/优点)。。。我在这里不检查大多数数字的长度,因此如果需要消除有4个或更多数字的情况(即,如果string1=“1234 main”将失败),请通过length()添加该数字

NOTDIGIT是一个很好的函数,如果你不需要检查4个以上的字符,这可能是一个比正则表达式快得多的解决方案

此外,还有一个建议-对于SAS,如果您使用的是9.2或更新版本,则应按以下方式编写正则表达式:

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

o指示编译器只编译正则表达式一次。(这将替换旧的“retain and if
\n\u
=1”方法。)如果要匹配3位数字而不匹配其他数字(即,如果“333”是匹配项,而不是“333”,并且可能有一个3宽度变量),则可能还需要使用\b而不是\s)\s是空白字符,而\b是单词边界,它类似于\s,但也包括字符串结尾标记。

为了好玩,有几个简单的非正则表达式解决方案(每个解决方案都有缺点/优点,具体取决于您的数据/期望的结果)。。。我在这里不检查大多数数字的长度,因此如果需要消除有4个或更多数字的情况(即,如果string1=“1234 main”将失败),请通过length()添加该数字

NOTDIGIT是一个很好的函数,如果你不需要检查4个以上的字符,这可能是一个比正则表达式快得多的解决方案

此外,还有一个建议-对于SAS,如果您使用的是9.2或更新版本,则应按以下方式编写正则表达式:

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

o指示编译器只编译正则表达式一次。(这将替换旧的“retain and if
\n\u
=1”方法。)如果要匹配3位数字而不匹配其他数字(即,如果“333”是匹配项,而不是“333”,并且可能有一个3宽度变量),则可能还需要使用\b而不是\s)\s是空白字符,而\b是单词边界,它类似于\s,但也包括字符串结尾标记。

您能解释一下这个正则表达式的作用吗?我得到了d{1,3}部分(匹配1-3位),第二位是如何工作的?@RawFocus:Positive lookahead
(?=\s)
确保匹配后面有空格(零宽度断言)@RawFocus-我强烈建议www.regular-expressions.info作为正则表达式指南-这是一个很好的介绍,信息丰富的资源,涵盖几乎所有可以想象的内容。此外,使用SAS正则表达式提示表将您在上述网站上学到的内容转换为SAS。语法可能不同:你能解释一下这个正则表达式的作用吗?我得到了d{1,3}部分(匹配1-3位),第二位是如何工作的?@RawFocus:Positive lookahead
(?=\s)
确保匹配后面有空格(零宽度断言)@RawFocus-我强烈建议www.regular-expressions.info作为正则表达式指南-这是一个很好的介绍,信息丰富的资源,涵盖几乎所有可以想象的内容。此外,使用SAS正则表达式提示表将您在上述网站上学到的内容转换为SAS。语法可能不同:这怎么是“非真实问题”?这怎么是“非真实问题”?