C#获取两个字符之间字符串中的字符串
问题描述:
我有一个字符串象下面这样:C#获取两个字符之间字符串中的字符串
{{"textA","textB","textC"}}
而目前,我使用下面的代码,以分割他们:
string stringIWantToSplit = "{{\"textA\",\"textB\",\"textC\"}}";
string[] result = stringIWantToSplit.Split(',');
,我可以得到下面的结果:
{{"textA"
"textB"
"textC"}}
在那之后,我可以手动修剪出的“{”和“}”得到最终的结果,但现在的问题是:
如果字符串是象下面这样:
`{{"textA","textB,textD","textC"}}`
那么结果将是预期的结果不同
预期结果:
"textA"
"textB,textD"
"textC"
实际结果:
{{"textA" "textB textD" "textC"}}
如何获得两个双引号之间的字符串?
更新时间:
刚才当我检查了数据,我发现,他们中的一些包含小数,即
{{"textA","textB","",0,9.384,"textC"}}
目前,我试图用Jenish Rabadiya的做法,我使用的正则表达式是
(["'])(?:(?=(\\?))\2.)*?\1
但与此正则表达式中,数字未选中,如何修改它,以便可以选择数字/小数?
答
尝试使用像下面的正则表达式。
Regex regex = new Regex(@"([""'])(?:(?=(\\?))\2.)*?\1");
foreach (var match in regex.Matches("{{\"textA\",\"textB\",\"textC\"}}"))
{
Console.WriteLine(match);
}
这里工作的dotnet小提琴=>Link
+0
我试图使用你的方法,但是当我修改数据时,有一些数字,我该如何更改正则表达式以便可以选择数字?(请看我的更新) – User2012384
答
我认为这会帮助你,
List<string> specialChars = new List<string>() {",", "{{","}}" };
string stringIWantToSplit = "{{\"textA\",\"textB,textD\",\"textC\"}}";
string[] result = stringIWantToSplit.Split(new char[] {'"'}, StringSplitOptions.RemoveEmptyEntries)
.Where(text => !specialChars.Contains(text)).ToArray();
答
使用这个表达式使得简单:
text = Regex.Replace(text, @"^[\s,]+|[\s,]+$", "");
答
假设你的字符串总是看起来像你的例子,你可以使用一个简单的正则表达式来获得你的字符串输出:
string s = "{{\"textA\",\"textB,textD\",\"textC\"}}";
foreach (Match m in Regex.Matches(s, "\\\".*?\\\""))
{
//do stuff
}
答
我终于修改了正则表达式是:
(["'])(?:(?=(\\?))\2.)*?\1|(\d*\.?\d*)[^"' {},]
这最后的工作原理:
样品:
你看过使用正则表达式吗? –
看起来与此相关:http://stackoverflow.com/questions/21342949/how-can-i-split-a-string-while-ignore-commas-in-between-quotes?rq=1 –
停止滚动你自己CSV解析器http://secretgeek.net/csv_trouble –