我几乎感到尴尬,但我正在努力创建一个正则表达式来将cat dog mouse
之类的内容更改为SQL where子句:
a.cat=b.cat AND a.dog=b.dog AND a.mouse=b.mouse
用
s/(\w*)\s?/a.$1=b.$1 AND /
我得到了
a.cat=b.cat AND a.dog=b.dog AND a.mouse=b.mouse AND a.=b. AND
哎哟。帮助赞赏。
编辑:我最终使用了两个连续的正则表达式。由于我在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 /);
感谢所有回复的人!
答案 0 :(得分:3)
您的第一个问题是,您需要+
而不是*
:
s/(\w+)\s?/a.$1=b.$1 AND /
这将解决a.=b.
。
即使这样,你也会得到AND
太多。你可以用最后的'1 = 1'解决这个问题。
你确定要在这里使用正则表达式,而不是分割,简单的字符串操作,然后是连接吗?我想这会更容易理解。
答案 1 :(得分:2)
您可以按空格拆分行,执行s/^(.+)$/a.$1=b.$1/
(不要在这种情况下使用正则表达式),然后加入数组“separator”“AND
”。
确保在开始之前修剪字符串。结束空格是额外a.=b.
的原因。
答案 2 :(得分:1)
我可以用2个正则表达式命名这个曲调!
str = prxchange('s/(\w+)/a.$1=b.$1/', -1, str);
str = prxchange('s/ +/ AND /', -1, str);
答案 3 :(得分:1)
你可以使用两个正则表达式,一个匹配第一个单词以外的所有表达式,另一个匹配第一个单词。
C#代码:
string where = "cat dog mouse";
where = Regex.Replace(where, @" (\w+)", " AND a.$1=b.$1");
where = Regex.Replace(where, @"^(\w+)", "a.$1=b.$1");