用于验证用户输入的不等式的正则表达式

时间:2015-03-04 02:37:57

标签: python regex

我搜索了一个答案,但我找不到一个明确的答案。拜托我,因为我是正则表达式中的一个菜鸟,这也是我的第一个问题。我使用的是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]+))+$

我知道这是完全错误的并且不是如何使用括号,但我没有一个可行的表达,我想告诉你我想要达到的目标。现在我需要知道三件事(至少,我希望)来解决它:

  1. 如何专门检查xp和yp,因为它们确实代替了设置xypz中的所有字符?
  2. 如何在xpypz工作后将0-9设为[0-9] +?是否可以出现任何数字而不是变量?
  3. 如何重复整个小组
  4. 我试图编写此表达式来检查用户是否添加了未声明的变量。我相信这可以在不使用正则表达式的情况下以不同的方式完成,但是在一行中完成它会很好。你能帮我弄清楚这三点吗?感谢。

2 个答案:

答案 0 :(得分:0)

尝试这种模式

(^(?=.)(?:(?:[+-]?\d*(?:xp|yp|p|z)*)+)[<>]=(?=.)(?:(?:[+-]?\d*(?:xp|yp|p|z)*)+)$)  

Demo

答案 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+1xpypp是给定的变量,则不在z上。

正如Greg Ball所说,最好的办法是尽可能使用解析。然后,除了使用扭曲变量之外,您还可以捕获更多语法错误,并且可以更可靠地执行此操作。