Проблема сопоставления скобок в регулярном выражении awk - PullRequest
0 голосов
/ 21 января 2020

У меня есть это выражение

if lbVar and ldcVar < 0.00 

И мне нужно сопоставить правую часть "и", которая может содержать скобки.

Выражение для сопоставления без скобок уже выполнено:

 if(match(linha, /(\t| )*(and)(\t| )+(\<ldc\w*)[ \t]*(<)[ \t]*(ldc\w*|[0-9]|[0-9]+(\.[0-9]*))/) > 0){ 
        print "match: "substr($0, RSTART, RLENGTH);
    }

Проблема в том, что выражение может выглядеть следующим образом:

if lbVar and ( ldcVar < 0.00 )

Как я могу исправить свое регулярное выражение так, чтобы оно соответствовало обеим ситуациям, то есть с круглыми скобками или без них?

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Если это не все, что вам нужно:

awk 'match($0,/.*[[:space:]]+and[[:space:]]+/){print substr($0,RLENGTH+1)}' file
( ldcVar < 0.00 )

, затем обновите ваш вопрос, чтобы уточнить ваши требования и предоставить более репрезентативный пример ввода / вывода, с которым мы можем протестировать потенциальное решение для простого прохода / Ошибка результата.

0 голосов
/ 21 января 2020

В последовательности несколько опечаток. Попытка использования измененного RE ниже

if(match(line, /(\t| )*(and)(\t| )(\(+)(\t| )*(\<ldc\w*)[ \t]*(<)[ \t]*(ldc\w*|[0-9]+|[0-9]+(\.[0-9]*))[ \t]*(\))/) ) {
    print "SUB: ="substr($0, RSTART, RLENGTH) "=" 
}

Также рассмотрите возможность изменения (\ t |) * на [\ t] * (для эффективности / упрощения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...