如何拆分带分隔符的字符串作为管道(不在双引号内

Rel*_*ity 6 c# regex string split delimiter

我有一个像下面的字符串,它是管道分开的.它在字符串周围有双引号(例如:"ANI").

如何使用管道分隔符(不在双引号内)拆分它?

511186|"ANI"|"ABCD-102091474|E|EFG"||"2013-07-20 13:47:19.556"
Run Code Online (Sandbox Code Playgroud)

分裂值如下:

511186
"ANI"
"ABCD-102091474|E|EFG"

"2013-07-20 13:47:19.556"
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!

编辑

我接受的答案对于那些内部有双引号的字符串不起作用.任何想法,应该是什么问题?

 using System.Text.RegularExpressions;
 string regexFormat = string.Format(@"(?:^|\{0})(""[^""]*""|[^\{0}]*)", '|');
string[] result = Regex.Matches("111001103|\"E\"|\"BBB\"|\"XXX\"|||10000009|153086649|\"BCTV\"|\"REV\"|||1.00000000|||||\"ABC-BT AD\"|\"\"\"ABC - BT\"\" AD\"|||\"N\"||\"N\"|||\"N\"||\"N",regexFormat)
  .Cast<Match>().Select(m => m.Groups[1].Value).ToArray();
  foreach(var i in result)
  Console.WriteLine(i)
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 2

您可以使用正则表达式来匹配字符串中的项目:

string[] result = Regex.Matches(s, @"(?:^|\|)(""[^""]*""|[^|]*)")
  .Cast<Match>()
  .Select(m => m.Groups[1].Value)
  .ToArray();
Run Code Online (Sandbox Code Playgroud)

解释:

(?:       A non-capturing group
^|\|      Matches start of string or a pipe character
)         End of group
(         Capturing group
"[^"]*"   Zero or more non-quotes surrounded by quotes
|         Or
[^|]*     Zero or more non-pipes
)         End of group
Run Code Online (Sandbox Code Playgroud)