Regex将空格分隔的列表转换为SQLWHERE子句
我几乎感到尴尬,但我正在努力创建一个正则表达式,以将类似于Regex将空格分隔的列表转换为SQLWHERE子句,sql,regex,sas,sas-macro,Sql,Regex,Sas,Sas Macro,我几乎感到尴尬,但我正在努力创建一个正则表达式,以将类似于猫-狗-鼠标的内容更改为SQL where子句: a.cat=b.cat AND a.dog=b.dog AND a.mouse=b.mouse 与 我明白了 哎哟。谢谢你的帮助 编辑:我最后使用了两个连续的正则表达式。由于我需要在SAS宏中使用该宏,并且我希望代码简洁,因此我编写了以下宏: %Macro rxchange(str,rx1,rx2,rx3,rx4,rx6,rx7,rx8,rx9,rx10); %Let rxno=
猫-狗-鼠标
的内容更改为SQL where子句:
a.cat=b.cat AND a.dog=b.dog AND a.mouse=b.mouse
与
我明白了
哎哟。谢谢你的帮助
编辑:我最后使用了两个连续的正则表达式。由于我需要在SAS宏中使用该宏,并且我希望代码简洁,因此我编写了以下宏:
%Macro rxchange(str,rx1,rx2,rx3,rx4,rx6,rx7,rx8,rx9,rx10);
%Let rxno=1;
%Do %While("&&rx&rxno" Ne "");
%Let str=%SysFunc(PRXChange(%Str(&&rx&rxno), -1, %Str(&str)));
%Let rxno=%Eval(&rxno+1);
%End;
&str
%Mend;
/* Try this: */
%Put %rxchange(cat dog mouse,s/(\w+)\s?/a.$1=b.$1 /,s/(\s+)/ AND /);
谢谢所有的回复 您的第一个问题是需要
+
而不是*
:
s/(\w+)\s?/a.$1=b.$1 AND /
这将解决a.=b.
的问题
即使这样,你也会得到和太多。你可以在最后用“1=1”来解决这个问题
您确定要在这里使用正则表达式,而不是拆分、简单的字符串操作,然后是联接吗?我认为这更容易理解。你的第一个问题是你需要+
而不是*
:
s/(\w+)\s?/a.$1=b.$1 AND /
这将解决a.=b.
的问题
即使这样,你也会得到和太多。你可以在最后用“1=1”来解决这个问题
您确定要在这里使用正则表达式,而不是拆分、简单的字符串操作,然后是联接吗?我认为这会更容易理解。您可以按空格拆分行,执行s/^(+$/a.$1=b.$1/
(不过不要在这种简单的情况下使用regex),然后使用“分隔符”和
”连接数组
开始之前,请确保修剪字符串。结尾的空格是额外的a.=b.
的原因。您可以按空格拆分行,执行s/^(.+)$/a.$1=b.$1/
(不过在这种简单的情况下不要使用regex),然后用“分隔符”和
连接数组
开始之前,请确保修剪字符串。结尾空格是额外的a.=b.
的原因,我可以在2个正则表达式中命名它
str = prxchange('s/(\w+)/a.$1=b.$1/', -1, str);
str = prxchange('s/ +/ AND /', -1, str);
我可以在2个正则表达式中命名这首曲调
str = prxchange('s/(\w+)/a.$1=b.$1/', -1, str);
str = prxchange('s/ +/ AND /', -1, str);
您可以使用两个正则表达式来实现这一点,一个匹配除第一个单词以外的所有内容,另一个匹配第一个单词
C#代码:
您可以使用两个正则表达式来实现这一点,一个匹配除第一个单词以外的所有内容,另一个匹配第一个单词
C#代码:
您使用的是什么实现语言?@Paul,我使用的是SAS正则表达式函数,它使用Perl语法。您使用的是什么实现语言?@Paul,我使用的是SAS正则表达式函数,它使用Perl语法。谢谢,我可以将操作分为几个部分。但是从学习的角度来看,如果能知道是否/如何使用单个regexNot以任何好的方式完成这项工作,那就太好了。问题是你必须替换三个单词,但是单词之间只有两个空白。如果您使用两个单独的正则表达式,一个用于转换单词,另一个用于转换单词之间的间距,则可以实现这一点。但这不是一个单一的正则表达式,而且它的效率比我建议的其他任何一个解决方案都要低。谢谢,我可以将操作分为几个部分。但是从学习的角度来看,如果能知道是否/如何使用单个regexNot以任何好的方式完成这项工作,那就太好了。问题是你必须替换三个单词,但是单词之间只有两个空白。如果您使用两个单独的正则表达式,一个用于转换单词,另一个用于转换单词之间的间距,则可以实现这一点。但这不是一个单一的正则表达式,而且它的效率比我建议的其他任何一个解决方案都要低。+1对于不使用正则表达式的建议:正则表达式功能强大,但通常比复杂的正则表达式更容易(通常更快)到达目标,如split()和join()在本例中,+1建议不要使用正则表达式:正则表达式功能强大,但通常比复杂正则表达式更容易(通常更快)到达目标,如本例中的split()和join()。
string where = "cat dog mouse";
where = Regex.Replace(where, @" (\w+)", " AND a.$1=b.$1");
where = Regex.Replace(where, @"^(\w+)", "a.$1=b.$1");