У меня есть строка следующим образом. Мне нужно извлечь строку из следующего состояния и добавить совпадающие скобки . У нас есть функция в Python, которые могут сделать скобку соответствия в PythonСопряжение в скобках в Python
a) data = [next_state=((!SE&((A1&A2)|(B1&B2)))|(SE&SI))):Q=iq]
b) data = [(next_state=(!SE&((!B2&D)|(B2&lq))|(SE&SI)),clear=B2&lqn,preset=B2&lq)))]
data_1 = data[0].split(',')
for item in data_1:
if item.find('next_state=')!= -1:
item_list = item.split('=')
item_op = item_list[len(item_list) -1].lstrip('(').rstrip(')')
item_op = "(" + item_op + ")"
print item_op
Excepted:((!SE&((A1&A2)|(B1&B2)))|(SE&SI))
(Удалить Extra и соответствия шаблону)
если требуется правильно/добавить недостающую parenthisis
код был работая нормально, когда у меня нет дополнительной скобки. Но иногда она может добавить дополнительные круглые скобки, например, b case. Так что это не обобщенное решение. возможно ли совместить скобки.
Я редактирую вопрос на основе обратной связи, которую я получил из-под ответа. Окончательная версия кода. Спасибо за предоставление ввода. Код комментарии приветствуются
#!/usr/bin/env py
import itertools
import sys
import sympy
import re
def extract_next_state(s):
p = re.compile('(\()|(\))')
depth = 0
startindex = None
start_point = False
for m in p.finditer(s):
if m.group(1): # (
depth += 1
print "depth (", depth
if not start_point:
startindex = m.start()
start_point = True
elif m.group(2): #)
depth -= 1
print "depth)", depth
if depth == 0:
return s[startindex:m.end()]
if __name__ == "__main__":
#data = ['next_state=(~SE&((~B2&D)|(B2&lq))|(SE&SI))']
data = ['next_state=((~SE&((A1&A2)|(B1&B2)))|(SE&SI)))']
data_1 = data[0].split(',')
com = None
for item in data_1:
if item.find('next_state=')!= -1:
item_list = item.split('=')
item_op = extract_next_state(item_list[1])
print item_op
expr = sympy.sympify(item_op)
temp_list = [ str(data) for data in expr.free_symbols]
print temp_list
Вы поставили код не имеет регулярных выражений на всех, и '' Ā' и b' строки не действительны Python , Пожалуйста, уточните и исправьте свой вопрос. Кроме того, ваше желание не ясно, пожалуйста, укажите пример ввода/ожидаемого вывода и любые исключения/stacktrace/messages/errors, которые вы можете получить. –
Вы забыли котировки для ваших данных образца? что ожидается для вашей функции? – alko
Согласование вложенных структур с регулярными выражениями, особенно * вложенными * структурами, всегда * болезненным *. Возможно, вместо этого вы хотите найти себе парсер. –