在C#中按字符拆分

时间:2016-11-04 05:53:23

标签: c# regex

我需要在C#中用','分割这段代码。

示例字符串:

  

'DC0''008 _', '23802.76', '23802.76', '23802.76', '通讯,ERC,', '2f17', '3f44c0ba-daf1-44f0-A361 - '

我可以使用string.split(','),但你可以看到'Comm,erc'被

分开
  

COMM
  ERC

同样'DC0''008_'应该拆分为

  

'DC0''008 _'

不是

  

'DC0'

     

'008 _'

预期的输出应该是这样的:

  

'DC0''008_'

     

'23802.76'

     

'23802.76'

     

'23802.76'

     

'Comm,erc,'

     

'2f17'

     

'3f44c0ba-daf1-44f0-A361 - '

4 个答案:

答案 0 :(得分:3)

split可以做到,但正则表达式会更复杂。

您可以使用这个更简单的正则表达式使用Regex.Matches

'[^']*'

并获取集合中的所有引用字符串。

<强>代码:

MatchCollection matches = Regex.Matches(input, @"'[^']*'");

打印所有匹配的值:

foreach (Match match in Regex.Matches(input, @"'[^']*'"))
         Console.WriteLine("Found {0}", match.Value);

将所有匹配的值存储在ArrayList

ArrayList list = new ArrayList();
foreach (Match match in Regex.Matches(input, @"'[^']*'")) {
   list.add(match.Value);
}

编辑:根据以下评论,如果OP想要在捕获的字符串中使用'',请使用此外观正则表达式:

'.*?(?<!')'(?!')

(?<!')'(?!')表示匹配未被其他单引号包围的单引号。

RegEx Demo

答案 1 :(得分:2)

您可以使用此正则表达式获取逗号和撇号中的所有内容:

(?<=')[^,].*?(?=')

Regex101 Explanation

要将其转换为字符串数组,您可以使用以下内容:

var matches = Regex.Matches(strInput, "(?<=')[^,].*?(?=')");
var array = matches.Cast<Match>().Select(x => x.Value).ToArray();

编辑:如果你希望它能够捕获双引号,那么在每种情况下匹配它的正则表达都会变得难以处理。在这一点上,最好只使用Regex.Split的简单模式:

var matches = Regex.Split(strInput, "^'|'$|','")
                   .Where(x => !string.IsNullOrEmpty(x))
                   .ToArray();

答案 2 :(得分:0)

using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApplication15
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "'DC0008_','23802.76','23802.76','23802.76','Comm,erc,','2f17','3f44c0ba-daf1-44f0-a361-'";
            var matches = Regex.Matches(str, "(?<=')[^,].*?(?=')");
            var array = matches.Cast<Match>().Select(x => x.Value).ToArray();
            foreach (var item in array)
            Console.WriteLine("'" + item + "'");
        }
    }
}

答案 3 :(得分:0)

最好修改你的字符串然后拆分它,这样你就可以实现你想要的东西,如下面的某些东西

string data = "'DC0008_','23802.76','23802.76','23802.76','Comm,erc,','2f17','3f44c0ba-daf1-44f0-a361-'";

data = Process(data); //process before split i.e for the time being replace outer comma with some thing else like '@'

string[] result = data.Split('@'); // now it will work lolz not confirmed and tested

Process()函数位于

之下
private string Process(string input)
{
   bool flag = false;
   string temp="";
   char[] data = input.ToCharArray();
   foreach(char ch in data)
   {
     if(ch == '\'' || ch == '"')
         if(flag)
           flag=false;
         else
           flag=true;

      if(ch == ',')
       {
           if(flag) //if it is inside ignore else replace with @
             temp+=ch;
           else
             temp+="@";
       }
      else
          temp+=ch;
   }
 return temp;
}

在此处查看输出http://rextester.com/COAH43918