Regeex для преобразования списка разделенного пространства в предложение SQL, где

StackOverflow https://stackoverflow.com/questions/2177283

  •  24-09-2019
  •  | 
  •  

Вопрос

Я почти смущаюсь, но я изо всех сил пытаюсь создать регулярное выражение, чтобы изменить что-то вроде 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top