正则表达式划分数学和逻辑表达式C#

时间:2017-02-06 20:13:36

标签: c# regex

我试图找到一种用正则表达式将表达式划分为多个部分的方法。我目前正在按空格分割所有内容,但这并不是正确的做法。这是一个示例表达式:

var expression = "#X+ 23>=#Threshold && #X * 4 != 54 || #IgnoreCheck"

我正在寻找的结果是所有部分的列表:

["#X", "+", "23", ">=", "#Threshold", "&&", "#X", "*", "4", "!=", "54", "||", "IgnoreCheck"] 

分割时要考虑的字符:

&& || != + = - * / ^ > < <= >=

1 个答案:

答案 0 :(得分:4)

您可以使用

var res = Regex.Split(expression, @"\s*(&&|\|\||<=|>=|!=|[-+=*/^><])\s*");

请参阅regex demo。主要思想是使用交替(|),因为一些替代品是多字符串。

<强>详情

  • \s* - 0+空白
  • (&&|\|\||<=|>=|!=|[-+=*/^><]) - 捕获组1(因此,当与Regex.Split一起使用时,这些部分将输出到结果数组中)匹配
    • && - 两个&符号
    • | - 或
    • \|\| - 2个管道
    • | - 或
    • <= - <然后=
    • | - 或
    • >= - >然后=
    • | - 或
    • != - !后跟=
    • | - 或
    • [-+=*/^><] - 此套装中的任何1个符号
  • \s* - 0+空白

enter image description here