Regeex для преобразования списка разделенного пространства в предложение SQL, где
Вопрос
Я почти смущаюсь, но я изо всех сил пытаюсь создать регулярное выражение, чтобы изменить что-то вроде cat dog mouse
К пункту SQL, где:
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
Отель Помочь оценить.
РЕДАКТИРОВАТЬ: Я закончил использовать два последовательных Regexes. Поскольку мне нужно было это в макрос 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.
.
Даже тогда вы получите AND
слишком. Вы можете решить это с «1 = 1» в конце.
Вы уверены, что хотите использовать Regex здесь, а не сплит, простые строковые манипуляции, затем присоединиться? Я думаю, что это будет проще понять.
Другие советы
Ты сможешь расколоть линия пробелами, выполнять s/^(.+)$/a.$1=b.$1/
(не используйте Regex для этой простой ситуации), затем присоединиться массив с «сепаратором» »AND
".
Убедись, что ты подрезать Строка перед началом. Конечное пространство является причиной дополнительных a.=b.
.
Вы можете сделать это с двумя регулярными выражениями, которые соответствуют всем, кроме первого слова, и тот, который соответствует первым.
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");
Я могу назвать эту мелодию в 2 регулярных выражения!
str = prxchange('s/(\w+)/a.$1=b.$1/', -1, str);
str = prxchange('s/ +/ AND /', -1, str);