我有这个字符串:
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'
有谁知道它为什么会这样?有什么建议吗?
答案 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'", @"(?<![?])[+]")