【问题标题】:Extracting expression提取表达式
【发布时间】:2011-07-27 09:32:48
【问题描述】:

我有一个表达式,我想在 python 2.6 中提取它。示例如下:

[a]+[c]*0.6/[b]-([a]-[f]*0.9)

这个去:

(
  '[a]',
  '+',
  '[c]',
  '*',
  '0.6',
  '/',
  '[b]',
  '-',
  '(',
  '[a]',
  '-',
  '[f]',
  '*',
  '0.9',
  ')',
)

我需要一份清单。请帮我一把。谢谢。

【问题讨论】:

  • 你是想做一个计算器还是什么?
  • 不计算。我需要像示例一样提取它。
  • ...解压后你会做什么?
  • 我是 python 新手。我有一个退格按钮,当它单击时,我需要删除列表的最后一个元素/我将通过堆栈使用它。/。我认为这是非常简单的方法。
  • mylist.pop() 将删除列表的最后一个元素。

标签: python regex expression extract text-extraction


【解决方案1】:
>>> import re
>>> expr = '[a]+[c]*0.6/[b]-([a]-[f]*0.9)'
>>> re.findall('(?:\[.*?\])|(?:\d+\.*\d*)|.', expr)
['[a]', '+', '[c]', '*', '0.6', '/', '[b]', '-', '(', '[a]', '-', '[f]', '*', '0.9', ')']

【讨论】:

    【解决方案2】:

    一种方法是创建一个正则表达式列表来匹配每个标记,例如:

    import re
    tokens = [r'\[.?\]', r'\(', r'\)', r'\+', r'\*', r'\-', r'/', r'\d+?.\d+', r'\d+']
    regex = re.compile('|'.join(tokens))
    

    然后你可以在你的表达式上使用findall 来返回一个匹配列表:

    >>> regex.findall('[a]+[c]*0.6/[b]-([a]-[f]*0.9)')
    <<< 
    ['[a]',
     '+',
     '[c]',
     '*',
     '0.6',
     '/',
     '[b]',
     '-',
     '(',
     '[a]',
     '-',
     '[f]',
     '*',
     '0.9',
     ')']
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 2016-09-09
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多