C# Split忽略空结果
我有这个字符串:C# Split忽略空结果,c#,regex,split,edifact,C#,Regex,Split,Edifact,我有这个字符串: IMD+F++:::PS4 SAINTS R IV R?+GA' 我想把它分成两个步骤。首先我想在+上分开,除了转义的加号“+”。第二,我想在上拆分结果,除了转义冒号“?:” 使用以下正则表达式,我可以成功拆分字符串: string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![\?])[\+]+"); 结果是不正确的。它应该是数组中的4个输入。它删除空结果。我需要空结果才能留在数组中
IMD+F++:::PS4 SAINTS R IV R?+GA'
我想把它分成两个步骤。首先我想在+上分开,除了转义的加号“+”。第二,我想在上拆分结果,除了转义冒号“?:”
使用以下正则表达式,我可以成功拆分字符串:
string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![\?])[\+]+");
结果是不正确的。它应该是数组中的4个输入。它删除空结果。我需要空结果才能留在数组中。结果应该是:
[0] IMD
[1] F
[2]
[3] :::PS4 SAINTS R IV R?+GA'
有人知道它为什么会这样吗?有什么建议吗?只需删除字符类后面的
+
。因为+
贪婪地匹配上一个令牌一次或多次。因此,这个[\+]+
正则表达式不仅匹配单个加号,还匹配以下加号
string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]")
string[]Data=Regex.Split(“IMD+F++:::PS4 SAINTS R IV R?+GA'),@”(只需删除字符类后的+
。因为+
贪婪地匹配上一个标记一次或多次。因此此[\+]+
Regex不仅匹配单个加号,还匹配以下加号
string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]")
string[]Data=Regex.Split(“IMD+F++:::PS4 SAINTS R IV R?+GA“,@”(您明确表示您希望在“至少一个加号”上进行拆分)-这就是[\+]+
的意思。这就是为什么它将++
视为一个单独的分隔符。只需在单个加号上拆分即可-请注意,您不需要将其放入一组字符中:
string[] data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<!\?)\+");
string[]data=Regex.Split(“IMD+F++:::PS4 SAINTS R IV R?+GA“,@”(您明确表示您希望在“至少一个加号”上进行拆分)-这就是[\+]+
的意思。这就是为什么它将++
视为一个单独的分隔符。只需在单个加号上拆分即可-请注意,您不需要将其放入一组字符中:
string[] data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<!\?)\+");
string[]data=Regex.Split(“IMD+F++:::PS4 SAINTS R IV R?+GA'”,@)(?字符类应更改为[:+]
;他也想在冒号上拆分。@TimPietzcker,但他的预期输出是不同的。嗯,你是对的-也许他说的是他在第一次拆分后的预期。@jjtilly应该澄清一下。我可以发誓我试过了你的建议。但是,是的,它是有效的。谢谢!字符类应该改为[:+]
;他也想在冒号上拆分。@TimPietzcker,但他的预期输出是不同的。嗯,你是对的-也许他说的是他在第一次拆分后的预期。@jjtilly应该澄清一下。我可以发誓,我已经尝试了你的建议。但是,是的,它是有效的。谢谢你!如果你想spli,你应该一次只关注一个问题关于冒号,我建议你把它作为一个单独的问题来问。(考虑到你的预期结果包括冒号,想必你现在还没有尝试这么做。)是的,我将一次进行一次拆分。主要问题是保留empy条目。但现在问题已经解决了。你应该一次专注于一个问题-如果你也想在冒号上拆分,我建议你作为一个单独的问题来问。(假设你的预期结果包括冒号,你可能还没有尝试这么做。)是的,我将一次进行一次拆分。主要问题是保留empy条目。但现在问题解决了。谢谢!这些示例完全按照我的要求工作。谢谢!这些示例完全按照我的要求工作。