Как извлечь уравнение в скобках Python 2.7? - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь извлечь уравнение в скобках, но я не знаю, как это сделать в python 2.7.

Я пытался re.findall, но я думаю, что шаблон неправильный.

child = {(x1<25)*2 +((x1>=25)&&(x2<200))*2+((x1>=25)&&(x2>=200))*1}

stringExtract = re.findall(r'\{(?:[^()]*|\([^()]*\))*\}', child)

ничего не возвращает вместо x1<25)*2 +((x1>=25)&&(x2<200))*2+((x1>=25)&&(x2>=200))*1

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы можете использовать это регулярное выражение - {([^}]*)}. Он соответствует символу {, затем [^}]* соответствует всему, кроме }, а } соответствует конечной скобке.

>>> import re
>>> eq = "{(x1<25)*2 +((x1>=25)&&(x2<200))*2+((x1>=25)&&(x2>=200))*1}"
>>> m = re.search("{([^}]*)}", eq)
>>> m.group(1)
'(x1<25)*2 +((x1>=25)&&(x2<200))*2+((x1>=25)&&(x2>=200))*1'
1 голос
/ 17 мая 2019

Кажется, что вас интересует только все между { и }, поэтому ваше регулярное выражение может быть намного проще:

import re
child = "{(x1<25)*2 +((x1>=25)&&(x2<200))*2+((x1>=25)&&(x2>=200))*1}"    
pattern = re.compile("""
    \s*     # every whitespace before leading bracket
    {(.*)}  # everything between '{' and '}'
    \s*     # every whitespace after ending bracket
""", re.VERBOSE)
re.findall(pattern, child)

И вывод такой:

['(x1<25)*2 +((x1>=25)&&(x2<200))*2+((x1>=25)&&(x2>=200))*1']

Чтобы получить строку из списка (re.findall() возвращает list), вы можете получить к ней доступ через нулевую позицию индекса: re.findall(pattern, child)[0]. Но также вам могут быть интересны другие методы для re, то есть re.search() или re.match().

Но если каждая строка имеет начальную и конечную скобки в первой и последней позиции, вы также можете просто сделать это:

child[1:-1]

что дает вам

'(x1<25)*2 +((x1>=25)&&(x2<200))*2+((x1>=25)&&(x2>=200))*1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...