如何提取括号python 2.7之间的方程式?

时间:2019-05-17 09:13:38

标签: python regex python-2.7

我正在尝试提取方括号之间的方程式,但是我不知道如何在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 个答案:

答案 0 :(得分:1)

似乎您只对{}之间的所有内容感兴趣,因此您的正则表达式可能更简单:

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'

答案 1 :(得分:1)

您可以使用此正则表达式-{([^}]*)}。它与字符{匹配,然后[^}]*匹配除}}以外的任何字符。

>>> 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'