英文:
Split into string array only the key by comma and not values c#
问题
这是我的字符串,当我尝试使用逗号分隔键的字符串数组时,出现问题。
> { Yr = 2019, Mth = DECEMBER , SeqN = 0, UComment = tet,tet1, OComment = test,test1, FWkMth = WK, FSafety = Y, FCustConsign = Y, FNCNRPull = 0, FNCNRPush = 0, CreatedTime = 2020-01-03 06:16:53 }
当我尝试使用 string.Split(',') 时,我得到了 "Ucomment = tet","tet1" 作为单独的数组。
但我需要在逗号分隔时得到分割的字符串数组。
> UComment = tet,tet1
> OComment = test,test1
我尝试使用正则表达式 ,(?=([^"]"[^"]")[^"]$)",但它没有起作用。
英文:
This is my String and i have problems when splitting into string array with comma seperated values for keys
> { Yr = 2019, Mth = DECEMBER , SeqN = 0, UComment = tet,tet1, OComment = test,test1, FWkMth = WK, FSafety = Y, FCustConsign = Y, FNCNRPull = 0, FNCNRPush = 0, CreatedTime = 2020-01-03 06:16:53 }
when i try to use string.Split(',') i get "Ucomment = tet","tet1" as seperate array.
But i need to have split string[] when seperated by comma
> UComment = tet,tet1
> OComment = test,test1
I have tried using the regex ,(?=([^"]"[^"]")[^"]$)" but it didnot work.
答案1
得分: 1
以下是已翻译的内容:
你可以尝试匹配正则表达式模式\S+\s*=\s*.*?(?=\s*,\s*\S+\s*=|\s*\}$)
:
string input = "{ Yr = 2019, Mth = DECEMBER , SeqN = 0, UComment = tet,tet1, OComment = test,test1, FWkMth = WK, FSafety = Y, FCustConsign = Y, FNCNRPull = 0, FNCNRPush = 0, CreatedTime = 2020-01-03 06:16:53 }";
Regex regex = new Regex(@"\S+\s*=\s*.*?(?=\s*,\s*\S+\s*=|\s*\}$)");
var results = regex.Matches(input);
foreach (Match match in results)
{
Console.WriteLine(match.Groups[0].Value);
}
这将打印:
Yr = 2019
Mth = DECEMBER
SeqN = 0
UComment = tet,tet1
OComment = test,test1
FWkMth = WK
FSafety = Y
FCustConsign = Y
FNCNRPull = 0
FNCNRPush = 0
CreatedTime = 2020-01-03 06:16:53
以下是正则表达式模式的解释:
\S+
:匹配一个键(非空白字符的序列)。\s*
:匹配可选的空格。=
:匹配等号。.*?
:匹配任何字符,直到看到下一个键/值对的开始或输入的结束。(?=\s*,\s*\S+\s*=|\s*\}$)
:这部分是一个正向预查,它要求接下来的内容要么是下一个键/值对的开始,要么是输入的结束。
英文:
You may try matching on the regex pattern \S+\s*=\s*.*?(?=\s*,\s*\S+\s*=|\s*\}$)
:
string input = "{ Yr = 2019, Mth = DECEMBER , SeqN = 0, UComment = tet,tet1, OComment = test,test1, FWkMth = WK, FSafety = Y, FCustConsign = Y, FNCNRPull = 0, FNCNRPush = 0, CreatedTime = 2020-01-03 06:16:53 }";
Regex regex = new Regex(@"\S+\s*=\s*.*?(?=\s*,\s*\S+\s*=|\s*\}$)");
var results = regex.Matches(input);
foreach (Match match in results)
{
Console.WriteLine(match.Groups[0].Value);
}
This prints:
Yr = 2019
Mth = DECEMBER
SeqN = 0
UComment = tet,tet1
OComment = test,test1
FWkMth = WK
FSafety = Y
FCustConsign = Y
FNCNRPull = 0
FNCNRPush = 0
CreatedTime = 2020-01-03 06:16:53
Here is an explanation of the regex pattern used:
\S+ match a key
\s* followed by optional whitespace and
= literal '='
\s* more optional whitespace
.*? match anything until seeing
(?=\s*,\s*\S+\s*=|\s*\}$) that what follows is either the start of the next key/value OR
is the end of the input
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论