Выражение выражение преобразователь регулярное выражение - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть несколько выражений, таких как

c1|<|5&&c2|>=|750&&c3|=|1
c1|<|5&&(c2|>=|750||c3|=|1)
c1|<|5&&(c2|>=|750||c3|=|1)&&c4|=|1
c1|<|5&&c2|>=|750||c3|=|1&&c4|=|1
(c1|<|5||c2|>=|750||c3|=|1)&&c4|=|1

. Есть ли какой-нибудь способ, которым мы можем отразить выражение, чтобы получить условие перед каждым оператором && и ||как:

c1 | <| 5 && c2 |> = | 750 && c3 | = | 1 -> (c1 | <| 5) && (c2 |> = | 750) && (c3 | = | 1)

c1 | <| 5 && (c2 |> = | 750 || c3 | = | 1) -> (c1 | <| 5) && ((c2 |> = | 750) || (c3| = | 1))

c1 | <| 5 && (c2 |> = | 750 || c3 | = | 1) && c4 | = | 1 -> (c1 | <| 5) && ((c2|> = | 750) || (c3 | = | 1)) && (c4 | = | 1)

Таким образом, в идеале мы должны получить 3 условия в первых 2 случаях и 4 условия в последнемдело.Любая помощь будет очень полезна.

1 Ответ

0 голосов
/ 01 марта 2019

Непонятно, что вы хотите, но эта команда sed преобразует ваш пример ввода в пример вывода:

sed -e 's/\&\&\|||/) & (/g;s/.*/(&)/'

Если вы хотите проанализировать выражение (например, несколько ваших примеров включают в себя вложенные скобки)(что, вероятно, обозначает приоритет), то вам не следует использовать движок регулярных выражений.Тривиально реализовать алгоритм шунтирования ярда Дейкстры для обработки этого типа ввода.

...