Форум сайта python.su
0
Привет. Подскажите как правильно написать регулярное выражение: нужно выбрать из текста (формулы) все “переменные” кроме VT, VBE, VBC, т.е., например, для C2**IS*exp(VBE/(NEL*VT))/(NEL*VT) + IS*exp(VBE/VT)/(BF*VT) это будут С2, IS, NEL, BF.
Для начала написал следующее:
re_obj = re.compile(r'([^\s*+\-*/()exp=][A-Za-z0-9]*)')
Отредактировано ioprst (Март 25, 2018 12:53:40)
Офлайн
857
Тут нужен лексический анализ. И регулярные выражения не выполнят его за тебя. Опиши задание чётче. Что и почему надо выбрать? Что и почему не нужно выбирать? Что на входе и что на выходе? Какие формулы поступают и какие результаты из них должны получаться?
Офлайн
0
Символы в формуле могут принимать значения: пробелы + - * / ^(т.к. я делаю это для того, чтобы вставить результат в матлаб, то **->^), скобки, exp ну и переменные:
VBC = Symbol('VBC') VBE = Symbol('VBE') VA = Symbol('VA') VB = Symbol('VB') IS = Symbol('IS') IK = Symbol('IK') IKR = Symbol('IKR') VT = Symbol('VT') BR = Symbol('BR') C4 = Symbol('C4') NCL = Symbol('NCL') BF = Symbol('BF') C2 = Symbol('C2') NEL = Symbol('NEL')
Офлайн
857
Лексический анализатор тут нужно строить. Регулярное выражение не поймёт, переменная это или не переменная. Для регулярного выражения это просто буквы и не более.
Вот пример лексического анализатора
python.org. tokenizer
ioprstНу ты можешь для всех групп букв проставить префиксы, а потом удалить префиксы, которые неправильно проставились (у функций и у заданных имён). Но это всё сломается на какой-нибудь другой формуле. Ну это чисто такое тупое решение, которое долго не проживёт.
В этой формуле мне нужно ко всем именам переменных (кроме VT, VBE, VBC) добавить префикс “obj.”.
Отредактировано py.user.next (Март 26, 2018 03:37:21)
Офлайн