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