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'", @"(?<![?])[+]");
我有这个字符串:
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'", @"(?<![?])[+]");