首页 > 解决方案 > 使用带有变量的正则表达式验证条件

问题描述

我有一个 Python 程序,它接受用户输入,如下所示:

python3 script.py in.csv ‘Length>4.5;Height<1'

in.csv是要应用某些条件的输入数据。在上面的示例中,长度和高度是来自输入数据的变量。任何数量的条件都是可能的。在上面的示例中,2 个不同的变量有 2 个条件。实际上,它可能是更多数量的变量。我的变量列表是(都是数字变量):

var_list = ['Length' , 'Height', 'Weight', 'Version', 'ID']

我想:

  1. 验证条件是一个有效的逻辑表达式。
  2. 使用条件过滤数据。

为此,我想构建一个正则表达式来解决第 1 部分,如果我能够破解第 1 部分,我认为第 2 部分将随之而来。但我无法构建正则表达式并匹配条件。

标签: pythonregex

解决方案


  1. 首先,我将参数拆分为“;”,以获取您输入的比较列表。

  2. 我看到的适当的正则表达式是 "((\w+)([><=])(.+))" 应该匹配两者

  3. 我会将正则表达式映射到我们从步骤 1 获得的列表上,以获取匹配项

  4. 然后您可以使用 group() 来获取匹配项的每个部分。

import re

a = "Length>4.5;Height<1".split(';')
r = re.compile(r'(\w+)(>=|<=|[><=])([0-9]+\.[0-9]+|[0-9]+)')
res = list(map(r.match, a))
print(res[0].group(0)) # 'Length>4.5'
print(res[0].group(1)) # 'Length'
print(res[0].group(2)) # '>'
print(res[0].group(3)) # '4.5'

# res[1] has 'Height<1'

推荐阅读