我试图找到一种用正则表达式将表达式划分为多个部分的方法。我目前正在按空格分割所有内容,但这并不是正确的做法。这是一个示例表达式:
var expression = "#X+ 23>=#Threshold && #X * 4 != 54 || #IgnoreCheck"
我正在寻找的结果是所有部分的列表:
["#X", "+", "23", ">=", "#Threshold", "&&", "#X", "*", "4", "!=", "54", "||", "IgnoreCheck"]
分割时要考虑的字符:
&& || != + = - * / ^ > < <= >=
答案 0 :(得分:4)
您可以使用
var res = Regex.Split(expression, @"\s*(&&|\|\||<=|>=|!=|[-+=*/^><])\s*");
请参阅regex demo。主要思想是使用交替(|
),因为一些替代品是多字符串。
<强>详情
\s*
- 0+空白(&&|\|\||<=|>=|!=|[-+=*/^><])
- 捕获组1(因此,当与Regex.Split
一起使用时,这些部分将输出到结果数组中)匹配
&&
- 两个&符号|
- 或\|\|
- 2个管道|
- 或<=
- <
然后=
|
- 或>=
- >
然后=
|
- 或!=
- !
后跟=
|
- 或[-+=*/^><]
- 此套装中的任何1个符号\s*
- 0+空白