c#Regex-按多个分隔符分割字符串,但不在引号内

c#Regex-按多个分隔符分割字符串,但不在引号内,c#,regex,string,C#,Regex,String,我正在尝试解析c#中的一个表达式。 表达式可以包含变量表中的变量,因此我需要用它的值替换每个变量名。为此,我使用以下方法拆分字符串: string[] split = Regex.Split(expression, @"([ !<>\b==\b+-/*])"); string[]split=Regex.split(表达式@“([!\b==\b+-/*]); 但是,当字符串包含字符串文字时,这将变得很糟糕。例如: “\”数字-\“+num”(来自控制台。打印(“数字-”+num))

我正在尝试解析c#中的一个表达式。 表达式可以包含变量表中的变量,因此我需要用它的值替换每个变量名。为此,我使用以下方法拆分字符串:

string[] split = Regex.Split(expression, @"([ !<>\b==\b+-/*])");
string[]split=Regex.split(表达式@“([!\b==\b+-/*]);
但是,当字符串包含字符串文字时,这将变得很糟糕。例如:

“\”数字-\“+num”
(来自
控制台。打印(“数字-”+num)

应拆分为
{“\”数字-\”,“num”}
, 而不是它当前所做的:
{“\”数字“,“-\”,“num”}

我找到了用单个分隔符字符分割引号之外的所有内容的方法,但我尝试用分隔符列表替换分隔符,但没有成功


提前谢谢。

我花了一段时间研究你的问题,但我想我有一个解决办法。 我建议使用两个匹配选项,一个是积极的向后看,另一个是积极的向前看。我改编了一些@Wiktor的操作符匹配,但去掉了一些罕见的


(?我花了一些时间来研究你的问题,但我想我有一个解决办法。
我建议使用两个匹配选项,一个是积极的向后看,另一个是积极的向前看


(?如果分隔符列表包含
=
,则无法将其放入字符类中,您需要一个替换组。此外,
\b
内部
[…]
不匹配单词边界,而是一个退格字符。字符类中介于
+
/
之间的
-
会创建一个范围。因此,您使用的正则表达式很乱。此外,您能否修复逐字字符串文字,以便我们可以尝试帮助您?它看起来像
@“number-”+num
?@WiktorStribiżew谢谢,我不知道你不能在字符类中使用\b。我还编辑了这个问题。我怎样才能得到我想要的结果?或者在哪里可以得到关于c#regex的详细解释?谷歌搜索找到了我目前使用的,你说它错了。看。它可能太冗长了,但我真的不知道你在说什么正在执行。@WiktorStribiżew您发送的代码没有按我需要的方式工作-它与我以前的代码完全相同。结果仍然是{“number,-,,+,num}。同样,在您发送的正则表达式测试程序中,“number-”得到匹配。是的,它不仅被匹配,而且被捕获,因此,
regex.Split()
可以在生成的数组中输出匹配项。除非您使用更好的示例和明确的要求进行澄清,否则我(或其他任何人)无法帮助您。如果您的分隔符列表包含
==
,则无法将其放入字符类中,您需要一个替换组。此外,
\b
内部
[…]
不匹配单词边界,而是一个退格字符。字符类中介于
+
/
之间的
-
会创建一个范围。因此,您使用的正则表达式很乱。此外,您能否修复逐字字符串文字,以便我们可以尝试帮助您?它看起来像
@“number-”+num
?@WiktorStribiżew谢谢,我不知道你不能在字符类中使用\b。我还编辑了这个问题。我怎样才能得到我想要的结果?或者在哪里可以得到关于c#regex的详细解释?谷歌搜索找到了我目前使用的,你说它错了。看。它可能太冗长了,但我真的不知道你在说什么正在执行。@WiktorStribiżew您发送的代码没有按我需要的方式工作-它与我以前的代码完全相同。结果仍然是{“number,-,,+,num}。同样,在您发送的正则表达式测试程序中,“number-”得到匹配。是的,它不仅被匹配,而且被捕获,因此,
regex.Split()
可以在结果数组中输出匹配项。除非您用更好的示例和明确的要求进行澄清,否则我认为我(或其他任何人)无法帮助您。
"number-" + num  
"number-" += num  
"-free-" == bear  
boom += "*freezer*"  
great + "stuff"  
boom + "-freezer-" + "wild"