【问题标题】:How to extract equation between brackets Python 2.7?如何在括号Python 2.7之间提取方程?
【发布时间】:2019-05-17 09:13:37
【问题描述】:

我正在尝试提取括号之间的等式,但我不知道如何在 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&lt;25)*2 +((x1&gt;=25)&amp;&amp;(x2&lt;200))*2+((x1&gt;=25)&amp;&amp;(x2&gt;=200))*1

【问题讨论】:

  • child 似乎不是字符串,re.findall 应该用在字符串上。给定的例子甚至没有为我编译,你能提供一个minimal reproducible example吗?
  • child.lstrip('{').rstrip('}'),给定的孩子是一个字符串child = '{(x1&lt;25)*2 +((x1&gt;=25)&amp;&amp;(x2&lt;200))*2+((x1&gt;=25)&amp;&amp;(x2&gt;=200))*1}'
  • 如果你的意思是child = '{(x1&lt;25)*2 +((x1&gt;=25)&amp;&amp;(x2&lt;200))*2+((x1&gt;=25)&amp;&amp;(x2&gt;=200))*1}',那么child[1:-1] 就足够了。

标签: python regex python-2.7


【解决方案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'

【讨论】:

  • re.findall() 的模式可以简化为:pattern = re.compile("{(.*)}")。使用空格,正则表达式也可以移植到re.match()(当然,如果有任何潜在的空格)。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多