0

我有这个字符串:

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

我想把它分成两个步骤。首先,我想在 + 上拆分,除了转义的加号“?+”。其次,我想在 : 上拆分结果,但转义冒号“?:”除外。

使用以下正则表达式,我可以成功拆分我的字符串:

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'

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

4

2 回答 2

3

您明确表示您要拆分“至少一加”-这就是[\+]+意思。这就是为什么它被++视为单个分隔符。只需拆分一个号 - 请注意,您不需要将其放入一组字符中:

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

如果您确实想将其放入一组字符中,则无需对其进行转义-在上面转义它的唯一原因是说“这不是组量词,它只是一个加号”。所以这同样好:

string[] data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]");
于 2015-01-23T07:32:11.637 回答
2

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

string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]")
于 2015-01-23T07:31:39.387 回答