Regex.Split 忽略空结果

Regex.Split ignores empty results

我有这个字符串:

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'

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

把字符class后面的+去掉即可。因为 + 贪婪地匹配前一个标记一次或多次。所以这个 [\+]+ 正则表达式不仅匹配单个加号而且匹配后面的加号。

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

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

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

如果你想把它放入一组字符中,你不需要转义它-上面转义它的唯一原因是说"this isn't a group quantifier, it's just a plus character".所以这同样好:

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