У меня есть куча математических выражений, хранящихся в виде строк. Вот короткий:Python: Разделение строки на подстроки
stringy = "((2+2)-(3+5)-6)"
Я хочу, чтобы разбить эту строку вверх в список, который содержит только информацию в каждой «юг в скобках фразы» Так (я уверен, что есть лучший способ выражения этого.) мой выход будет:
['2+2','3+5']
у меня есть несколько идей о том, как это сделать, но я продолжать работать в «хорошо, теперь, что» вопрос.
Например:
for x in stringy:
substring = stringy[stringy.find('('+1 : stringy.find(')')+1]
stringlist.append(substring)
Работы просто персиковый вернуться 2 + 2, но это о том, насколько это идет, и я полностью прикрывать о том, как пройти через оставшуюся ...
написать фактический парсер. (Использование [pyparsing] (http://pyparsing.wikispaces.com/) или [Parsley] (https://pypi.python.org/pypi/Parsley) или [ANTLR] (http://www.antlr3.org /) или что-то еще.) – millimoose
Но эта проблема разрешима в O (n), так как она сглаживается до слова проблема правильных грамматик, тогда как парсеру требуется хотя бы O (n^3), так как для этого нужны контекстуальные грамматики. И синтаксический анализатор - это намного больше кода для написания, но, безусловно, ... –
Что вы хотите сделать, скажем, '((2 * (2 + 2)) - (3 + 5) -6)'? Если вы получаете '2 * (2 + 2)', '2 + 2', то и другое, или нет? – abarnert