我有一个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 部分将随之而来。但是我无法构建正则表达式并匹配条件。
-
首先,我将参数拆分为";",以获取您输入的比较列表。
-
我看到的适当的正则表达式是"((\w+(([><=]((.+((",它应该同时匹配两者
-
我会将正则表达式映射到我们从步骤 1 中获得的列表,以获得匹配项
-
然后你可以使用 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'