Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Split忽略空结果_C#_Regex_Split_Edifact - Fatal编程技术网

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条目。但现在问题解决了。谢谢!这些示例完全按照我的要求工作。谢谢!这些示例完全按照我的要求工作。