Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex sas、正则表达式、数字、子字符串、prxchange_Regex_Sas - Fatal编程技术网

Regex sas、正则表达式、数字、子字符串、prxchange

Regex sas、正则表达式、数字、子字符串、prxchange,regex,sas,Regex,Sas,我需要以下代码的帮助。我看不出这是如何从这个地址行文本中提取号码的。当它(模式)显示s/\D/时,我认为这会用空格代替数字。我知道这里的第二部分是将子字符串上移到地址行文本中的第一个空格。但是,我看不出这是如何提取数字的。我调出了数据集,看起来这是可行的。请帮助我了解这是如何工作的 DATA OUT.REQ_1_2_03; SET OUT.REQ_1_2_02; /* GET STREET NUMBER*/ PRE_RCV_ST_NB=PRXCHANGE

我需要以下代码的帮助。我看不出这是如何从这个地址行文本中提取号码的。当它(模式)显示
s/\D/
时,我认为这会用空格代替数字。我知道这里的第二部分是将子字符串上移到地址行文本中的第一个空格。但是,我看不出这是如何提取数字的。我调出了数据集,看起来这是可行的。请帮助我了解这是如何工作的

DATA OUT.REQ_1_2_03;
        SET OUT.REQ_1_2_02;
    /*  GET STREET NUMBER*/
        PRE_RCV_ST_NB=PRXCHANGE('s/\D/ /',-1,SUBSTR(PRE_RCV_ADDRESSS_LINE_1,1,PRXMATCH('/\s/',PRE_RCV_ADDRESSS_LINE_1)));
        POST_RCV_ST_NB=PRXCHANGE('s/\D/ /',-1,SUBSTR(POST_RCV_ADDRESSS_LINE_1,1,PRXMATCH('/\s/',POST_RCV_ADDRESSS_LINE_1)));
        PRE_HOST_ST_NB=PRXCHANGE('s/\D/ /',-1,SUBSTR(PRE_HOST_ADDR_LINE_1,1,PRXMATCH('/\s/',PRE_HOST_ADDR_LINE_1)));
        POST_HOST_ST_NB=PRXCHANGE('s/\D/ /',-1,SUBSTR(POST_HOST_ADDR_LINE_1,1,PRXMATCH('/\s/',POST_HOST_ADDR_LINE_1)));   
    RUN;

试着用一个例子来理解

     PRE_RCV_ADDRESSS_LINE_1 ="123hello Village st"
从代码的左侧开始

first use prxmatch and it finds first space(\s)that comes 123hello
do  substr till that space and you get 123hello
then remove  prxchanges to replace \D (that is anything other than digit) and 
is converted to 123
用例子来总结

 "123hello Village st" -- find space(\s) by prxmatch and substring till space gives "123hello"
 "123hello" is changed to "123" by prxchange which replaces anything other than digit(\D) .

 /* run this step to understand it better*/
 data want ;
 PRE_RCV_ADDRESSS_LINE_1 = "123hello Village st";
 test1= SUBSTR(PRE_RCV_ADDRESSS_LINE_1,1,PRXMATCH('/\s/',PRE_RCV_ADDRESSS_LINE_1));
 PRE_RCV_ST_NB= PRXCHANGE('s/\D//',-1,SUBSTR(PRE_RCV_ADDRESSS_LINE_1,1,PRXMATCH('/\s/',PRE_RCV_ADDRESSS_LINE_1)));
 run;

\D表示:非数字。(每件事都是一个数字)。听起来需要做很多工作才能完成两个简单的函数调用<代码>压缩(扫描(字符串,1',,'kd')