我有一个输入字符串,例如
var input = "'Test string','abc'";
我想用正好两个字符将其分割,忽略定界符之前,之间或之后的空格。例如,基于输入,我希望获得以下输出。
index0='Test string'
index1='abc'
即使我的输入看起来像其中任何一个,我也要保留该输出。
var input = "'Test string','abc'";
var input = "'Test string ','abc'";
var input = "'Test string' ,'abc'";
var input = "'Test string', 'abc'";
var input = "'Test string ' , 'abc'";
只要有两个字符'(单引号和逗号),无论它们之前,之间或之后有空格,我都希望基于这两个字符分隔符来分割字符串。分割只能是两个字符。如果输入仅具有'或,请保持输入不变。仅将输入除以',不除以两个字符中的任何一个。请帮忙。这是我的代码。
static void Main(string[] args)
{
var input = "'Test string','abc'";
var results = Regex.Split(input, @"[ ',]+");
foreach (var item in results)
Console.WriteLine(item);
Console.ReadLine();
}
答案 0 :(得分:1)
或使用此模式的正则表达式来替换空白(?<=')\s*,\s*
示例
var inputs = new []{ "'Test string','abc'",
"'Test string ','abc'",
"'Test string' ,'abc'",
"'Test string', 'abc'",
"'Test string ' , 'abc'",
"Test string','abc','John's test'" };
foreach (var input in inputs)
{
var results = Regex.Split(input, @"(?<=')\s*,\s*");
foreach (var result in results)
Console.WriteLine(result);
}
输出
'Test string'
'abc'
'Test string '
'abc'
'Test string'
'abc'
'Test string'
'abc'
'Test string '
'abc'
Test string'
'abc'
'John's test'
可视化
答案 1 :(得分:1)
尝试一下:
string input = "' Test string ','abc'";
string[] listInput = input.Split(',');
foreach (string li in listInput){
String output = li.TrimStart('\'').TrimEnd('\'').Trim();
output = "'"+output+"'";
Console.WriteLine(output);
}
答案 2 :(得分:1)
以逗号分隔,然后修剪单引号和空格
var input = "'Test string ' , 'abc', 'John's test'";
var output = input.Split(',').Select(p => p.Trim().Trim('\'').Trim());
// Test string, abc, John's test.
答案 3 :(得分:0)
如果输入是可预测的并且从不包含转义的引号,则可以执行以下操作:
input.Split('\'').Where((x, i) => i % 2 == 1).Select(p => p.Trim());
在这里使用它:https://dotnetfiddle.net/AqookJ
input.Split('\'')
以'
.Where((x, i) => i % 2 == 1)
选择拆分的第二个项目,这是此上下文中引号内的所有内容。为了提高效率,可以将其更改为(x, i) => (i & 1) == 1
.Select(p => p.Trim())
将从集合中每个项目的开头和结尾删除空格。
如果目标字符串内有引号,则可以使用以下方法:
public static IEnumerable<string> Split(string inpt)
{
IEnumerable<string> res = Regex.Split(inpt, @"('\s*,\s*'|^\s*'|'\s*$)").Where((x, i) => i % 2 == 0).Select(p => p.Trim()).Skip(1);
return res.Take(res.Count() - 1);
}
这会将输入分为'\s*,\s*'
,^\s*'
和'\s*$
。
然后它将丢弃集合的第一和最后一项,这将是第一和最后一个引号。
在此处查看实际操作:https://dotnetfiddle.net/sQ6Y2x
答案 4 :(得分:0)
您可以创建如下所示的方法以获得所需的值。为每个数据调用此方法。
private string GetValues(string input)
{
StringBuilder newValue = new StringBuilder();
string[] parts = input.Split(',');
int counter = 0;
foreach (string str in parts)
{
newValue.AppendLine("index" + counter++ + ":" + "'" + str.Trim().Trim('\'').Trim() + "'");
}
return newValue.ToString();
}
输入:
"'Test string','abc'";
"'Test string ','abc'";
"'Test string' ,'abc'";
"'Test string', 'abc'";
"'Test string ' , 'abc'";
"Test string','abc','John's test'";
输出如下:
index0:'Test string'
index1:'abc'
index0:'Test string'
index1:'abc'
index0:'Test string'
index1:'abc'
index0:'Test string'
index1:'abc'
index0:'Test string'
index1:'abc'
index0:'Test string'
index1:'abc'
index2:'John's test'