Regex.Split忽略空结果

时间:2015-01-23 07:28:16

标签: c# regex split edifact

我有这个字符串:

IMD+F++:::PS4 SAINTS R IV R?+GA'

我想分两步拆分它。首先,我想分开+除了转义加号"?+"。其次,我想将结果拆分为:,除了转义的冒号"?:"。

使用以下Regex,我可以成功分割我的字符串:

string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![\?])[\+]+"); 

结果:

[0] IMD
[1] F
[2] :::PS4 SAINTS R IV R?+GA'

结果不正确。它应该是数组中的4个输入。它消除了空结果。我需要将空结果保留在数组中。结果应该是:

[0] IMD
[1] F
[2]
[3] :::PS4 SAINTS R IV R?+GA'

有谁知道它为什么会这样?有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您明确表示要分开&#34; 至少一加+&#34; - 那是[\+]+的含义。这就是为什么它将++视为单个分隔符的原因。只需拆分加上 - 并注意您不需要将其放入一组字符中:

string[] data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<!\?)\+");

如果你想把它放入一组角色中,你就不需要逃避它了 - 逃避它的唯一原因就是说&#34;这不是& #39; ta group quantifier,它只是一个加号字符&#34;。所以这同样好:

string[] data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]");

答案 1 :(得分:2)

只需删除字符类后的+即可。因为+贪婪地匹配前一个令牌一次或多次。所以这个[\+]+正则表达式不仅匹配单个加号,还匹配以下加号。

string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]")