Я пытаюсь разбить строку на C#, чтобы сделать ее логикой для моего кода. Строка:Нужна помощь для разбивки строки
if (x111 > 0)
then ((x111/ x222) >= 34 and (x222/x222) <= 4500)
else (if (x333 equals 0)
then true else false)
Я использую следующий код для других строк, и это работает прекрасно:
string query = "if (x111 > 0) then (x222 > 0) else true";
string result = query.Split(new string [] {"if", "then", "else" },StringSplitOptions.RemoveEmptyEntries);
Выход:
(x111> 0)
(x222> 0)
true
Для моей выше строки есть проблема, что тогда условие содержит другую вложенную логику, и мне нужно разбить ее на логику. Могу ли я разбить его на основе "(" и ")", так что я смогу сохранить результаты для различных выражений, таких как , если then then else и вложенные условия.
Возможно, что-то не так с вашим подходом/архитектурой, если вы пытаетесь написать собственный парсер ... что вы на самом деле пытаетесь сделать? – Nathan
, каким должен быть outpuit строки если (x111> 0) затем ((x111/x222)> = 34 и (x222/x222) <= 4500) остальное (если (X333 равен 0) тогда правда еще ложь) ???? –
Просто любопытно, но вы можете попробовать ['(? <= (?: if | then | else) \ s *) (?: \ ((?> [^()] + | \ ((?) | \) (? <-number>)) * (? (Число) (?!)) \) | \ W +) '] (http://regexstorm.net/tester?p= (% 3f% 3c% 3d (% 3f% 3aif % 7cthen% 7celse)% 5cs *) (% 3f% 3a% 5с ((% 3f% 3e% 5b% 5e()% 5d% 2b% 7c% 5с ((% 3f% 3cnumber% 3e)% 7c% 5c) (% 3f% 3c номер% 3e)) * (% 3f (число) (% 3f!))% 5c)% 7c% 5cw% 2b) & я =, если + (+ x111 +% 3e + 0 +) +% 0d% 0a +++ затем + ((+ x111% 2f + x222) +% 3e% 3d + 34 + и + (+ x222 +% 2F + x222) +% 3c% 3D + 4500) +% 0d% 0aelse + (+ если + (+ X333 + равна + 0) +% 0d% 0a +++ +, то истинно + еще + ложь)). Однако, я думаю, вам действительно нужно написать собственный парсер. –