我正在尝试找到一种使用正则表达式将表达式分成多个部分的方法。我目前正在按空格拆分所有内容,但这不是正确的做法。这是一个示例表达式:
var expression = "#X+ 23>=#Threshold && #X * 4 != 54 || #IgnoreCheck"
我要查找的结果是所有部分的列表:
["#X", "+", "23", ">=", "#Threshold", "&&", "#X", "*", "4", "!=", "54", "||", "IgnoreCheck"]
拆分时要考虑的字符:
&& || != + = - * / ^ > < <= >=
最佳答案
你可以使用
var res = Regex.Split(expression, @"\s*(&&|\|\||<=|>=|!=|[-+=*/^><])\s*");
参见 regex demo .主要思想是使用交替 (|
),因为一些替代是多字符字符串。
详情
-
\s*
- 0+ 空格 -
(&&|\|\||<=|>=|!=|[-+=*/^><])
- 捕获组 1(因此,当与Regex.Split
一起使用时,这些部分将输出到结果数组中)匹配-
&&
- 两个符号 -
|
- 或者 -
\|\|
- 2 个管道 -
|
- 或者 -
<=
- 一个<
然后=
-
|
- 或者 -
>=
- 一个>
然后=
-
|
- 或者 -
!=
-!
其次是=
-
|
- 或者 -
[-+=*/^><]
- 此集合中的任何 1 个符号
-
-
\s*
- 0+ 空格
关于c# - 正则表达式划分数学和逻辑表达式C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42076457/