将字符串拆分为两个字符,忽略任何字符之前,之中或之后的空格

时间:2019-05-31 03:27:53

标签: c# .net

我有一个输入字符串,例如

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();

    }

5 个答案:

答案 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'

可视化

enter image description here

Full Demo here

答案 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'