python - 使用带有变量的正则表达式验证条件
问题描述
我有一个 Python 程序,它接受用户输入,如下所示:
python3 script.py in.csv ‘Length>4.5;Height<1'
in.csv
是要应用某些条件的输入数据。在上面的示例中,长度和高度是来自输入数据的变量。任何数量的条件都是可能的。在上面的示例中,2 个不同的变量有 2 个条件。实际上,它可能是更多数量的变量。我的变量列表是(都是数字变量):
var_list = ['Length' , 'Height', 'Weight', 'Version', 'ID']
我想:
- 验证条件是一个有效的逻辑表达式。
- 使用条件过滤数据。
为此,我想构建一个正则表达式来解决第 1 部分,如果我能够破解第 1 部分,我认为第 2 部分将随之而来。但我无法构建正则表达式并匹配条件。
解决方案
首先,我将参数拆分为“;”,以获取您输入的比较列表。
我看到的适当的正则表达式是 "((\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'
推荐阅读
- javascript - 在 Vue 中,单击时将多个按钮之一更改为活动状态
- tensorflow - 关键错误:logtostderr(python,tensorflow)
- css - 如何让第 n 个类型的模式像 1-2-2-1 一样工作?
- qlikview - Qlikview 使用 forloop 迭代临时表的结果集
- django - 为什么我不能在管理站点上注册我的 Django App 模型?
- python - 如何改进正则表达式以找到最合适的 URL 字符串?
- mariadb - 我应该在包含大量数据的表上使用 WITH 而不是 JOIN 吗?
- c# - 我想将形状添加到工具箱控件然后能够将它们放入图表控件
- swift - Alamofire 没有得到充分的回应
- sql-server - SQL Server 代理中的错误:“varchar 数据类型与 datetime 数据类型的对话导致超出范围。”