我搜索了一个答案,但我找不到一个明确的答案。拜托我,因为我是正则表达式中的一个菜鸟,这也是我的第一个问题。我使用的是Python 3,但是Javascript也需要这个。
我尝试做的是验证用户的输入。输入是不等式(空格被移除),变量由用户命名并预先给出。 例如,我们说我有这种不平等:
x+y+6p<=z+1
将给出变量x,y,p,z。现在的问题是,如果不平等是这样的:
xp+yp+6p<=z+1
给定的变量是xp,yp,p和z。 我试图编写一个正则表达式,以匹配任何不等式与这种格式,在不等式中没有空格。我无法弄清楚如何检查替代字符串。例如,我写了以下表达式:
^([\+\-]?[0-9]*([xpypz]|[0-9]+))+[<>]=([\+\-]?[0-9]*([xpypz]|[0-9]+))+$
我知道这是完全错误的并且不是如何使用括号,但我没有一个可行的表达,我想告诉你我想要达到的目标。现在我需要知道三件事(至少,我希望)来解决它:
我试图编写此表达式来检查用户是否添加了未声明的变量。我相信这可以在不使用正则表达式的情况下以不同的方式完成,但是在一行中完成它会很好。你能帮我弄清楚这三点吗?感谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
[0-9]*(xp|yp|p|z)*([+-][0-9]*(xp|yp|p|z)*)*(<|>|<=|>=)[0-9]*(xp|yp|p|z)*([+-][0-9]*(xp|yp|p|z)*)*
这很难看,并且不会像1++x<p
那样发现错误,也不会允许sin
或指数等其他功能。它与xp+yp+6p<=z+1
匹配,但如果xp+yp+6x<=z+1
,xp
,yp
和p
是给定的变量,则不在z
上。
正如Greg Ball所说,最好的办法是尽可能使用解析。然后,除了使用扭曲变量之外,您还可以捕获更多语法错误,并且可以更可靠地执行此操作。