簡體   English   中英

在C#中按字符分割字符串

[英]Split string by character in C#

我需要在C#中用“,”分隔此代碼。

示例字符串:

'DC0'008 _','23802.76','23802.76','23802.76','Comm,erc,','2f17','3f44c0ba-daf1-44f0-a361-'

我可以使用string.split(','),但正如您所看到的,'Comm,erc'由

通訊
erc

同樣'DC0'008_'應該拆分為

'DC0'008_'

不像

'DC0'

'008_'

預期的輸出應如下所示:

'DC0'008_'

'23802.76'

'23802.76'

'23802.76'

'Comm,erc'

'2f17'

'3f44c0ba-daf1-44f0-a361-'

split可以做到,但是regex會更復雜。

您可以使用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要在捕獲的字符串中使用'' ,則使用此環視正則表達式:

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

(?<!')'(?!')表示匹配不被另一個單引號引起來的單引號。

正則演示

您可以使用此正則表達式獲取逗號和撇號內的所有內容:

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

Regex101說明

要將其轉換為字符串數組,可以使用以下命令:

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();
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 + "'");
        }
    }
}

最好修改您的字符串然后將其分割,以便您可以像下面的東西那樣實現所需的功能

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM