C# 获取字符串中两个字符之间的字符串
C# Get string between two characters in a string
我有如下字符串:
{{"textA","textB","textC"}}
目前,我正在使用以下代码拆分它们:
string stringIWantToSplit = "{{\"textA\",\"textB\",\"textC\"}}";
string[] result = stringIWantToSplit.Split(',');
我可以得到以下结果:
{{"textA"
"textB"
"textC"}}
之后,我可以手动 trim 出 '{' 和 '}' 以获得最终结果,但问题是:
如果字符串如下所示:
`{{"textA","textB,textD","textC"}}`
那么结果将与预期结果不同
预期结果:
"textA"
"textB,textD"
"textC"
实际结果:
{{"textA"
"textB
textD"
"textC"}}
如何获取两个双引号之间的字符串?
已更新:
刚才查资料的时候发现有些是小数,即
{{"textA","textB","",0,9.384,"textC"}}
目前,我正在尝试使用 Jenish Rabadiya 的方法,我使用的正则表达式是
(["'])(?:(?=(\?)).)*?
但是使用这个正则表达式,没有选择数字,如何修改它以便可以选择数字/小数?
我想这对你有帮助,
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
}
尝试像下面这样使用正则表达式。
Regex regex = new Regex(@"([""'])(?:(?=(\?)).)*?");
foreach (var match in regex.Matches("{{\"textA\",\"textB\",\"textC\"}}"))
{
Console.WriteLine(match);
}
这是正在工作的 dotnet fiddle => Link
我最终将正则表达式修改为:
(["'])(?:(?=(\?)).)*?|(\d*\.?\d*)[^"' {},]
这终于奏效了:
样本:
我有如下字符串:
{{"textA","textB","textC"}}
目前,我正在使用以下代码拆分它们:
string stringIWantToSplit = "{{\"textA\",\"textB\",\"textC\"}}";
string[] result = stringIWantToSplit.Split(',');
我可以得到以下结果:
{{"textA"
"textB"
"textC"}}
之后,我可以手动 trim 出 '{' 和 '}' 以获得最终结果,但问题是:
如果字符串如下所示:
`{{"textA","textB,textD","textC"}}`
那么结果将与预期结果不同
预期结果:
"textA"
"textB,textD"
"textC"
实际结果:
{{"textA"
"textB
textD"
"textC"}}
如何获取两个双引号之间的字符串?
已更新:
刚才查资料的时候发现有些是小数,即
{{"textA","textB","",0,9.384,"textC"}}
目前,我正在尝试使用 Jenish Rabadiya 的方法,我使用的正则表达式是
(["'])(?:(?=(\?)).)*?
但是使用这个正则表达式,没有选择数字,如何修改它以便可以选择数字/小数?
我想这对你有帮助,
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
}
尝试像下面这样使用正则表达式。
Regex regex = new Regex(@"([""'])(?:(?=(\?)).)*?");
foreach (var match in regex.Matches("{{\"textA\",\"textB\",\"textC\"}}"))
{
Console.WriteLine(match);
}
这是正在工作的 dotnet fiddle => Link
我最终将正则表达式修改为:
(["'])(?:(?=(\?)).)*?|(\d*\.?\d*)[^"' {},]
这终于奏效了:
样本: