正则表达式用于比较表达式

时间:2015-05-07 18:04:54

标签: c# regex match

我需要匹配以下字符串:

( anything >= anything )

并且只能通过这些比较运算符:> =< = ==!=< >他们只能在那里一次。 我所拥有的是:

^\(.+(>=|<=|>|<|==|!=).+\)$

但它匹配像&gt; =!=之类的东西。 我确实查看了stackoverflow问题并用Google搜索但找不到合适的解决方案。

你能帮帮我吗?

3 个答案:

答案 0 :(得分:2)

如果您还计划捕获(myName == "Денис")等字符串,则需要使用以下正则表达式:

^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$

请参阅demo on Regexstorm(支持.NET正则表达式,与regex101.com不同)

由于使用了http://regexhero.net(?> ... )),atomic grouping,因此根据character classes的测试结果,比Karthik Manchala的建议要快得多( [<>=])和懒惰匹配(*?)。此外,如果在==运算符之前或之后缺少空格,我的正则表达式仍将捕获表达式。

使用(?m)^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$我的正则表达式每秒产生15,783次迭代,而Karthik&#39; s (?m)^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$每秒产生9,204次迭代速度。

答案 1 :(得分:1)

^\(\s*[a-zA-Z0-9_+\-\/* ]+\s*(>=|<=|>|<|==|!=)\s*[a-zA-Z0-9_+\-\/* ]+\s*\)$这样的正则表达式可以解决这个问题吧?

A Regex101 with it in action can be found here.

答案 2 :(得分:1)

您可以使用以下内容:

^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$

说明:

  • ((?!(>=|<=|>|<|==|!=)).)+(>=|<=|>|<|==|!=)
  • 以外的任何字符
  • \s+(>=|<=|>|<|==|!=)\s+其中一个运营商后跟
  • ((?!(>=|<=|>|<|==|!=)).)+(>=|<=|>|<|==|!=)
  • 以外的任何字符