C # Regex Split - запятые вне кавычек

Если вы используете Linux-систему, вам нужно добавить

using namespace std;

Ниже заголовков

Если в окнах убедитесь, что вы правильно помещаете заголовки #include<iostream.h>

#include<string.h>

Обратитесь к этому, чтобы он работал отлично.

#include <iostream>
#include <string>

int main ()
{
std::string str="We think in generalities, but we live in details.";
                                       // (quoting Alfred N. Whitehead)

  std::string str2 = str.substr (3,5);     // "think"

   std::size_t pos = str.find("live");      // position of "live" in str

  std::string str3 = str.substr (pos);     
// get from "live" to the end

  std::cout << str2 << ' ' << str3 << '\n';

  return 0;
}
37
задан João Pereira 30 June 2010 в 09:08
поделиться

3 ответа

Вы можете разделить все запятые, которые имеют четное количество кавычек после них, используя следующий Regex для их поиска:

",(?=(?:[^']*'[^']*')*[^']*$)"

Вы будете использовать его как

var result = Regex.Split(samplestring, ",(?=(?:[^']*'[^']*')*[^']*$)");
71
ответ дан 27 November 2019 в 03:20
поделиться

Попробуйте (взломанный у Дженса) в методе split:

",(?:.*?'[^']*?')"

или просто добавьте вопросительные знаки после * Дженса, это делает его ленивым, а не жадным.

0
ответ дан 27 November 2019 в 03:20
поделиться

хотя я тоже иногда люблю сложности, но это не вызов. пожалуйста, прочитайте эту статью http://secretgeek.net/csv_trouble.asp http://www.filehelpers.com/

[Edit1, 3]: или, возможно, эта статья тоже может помочь (в ссылке показан только пример кода для VB.Net, но, тем не менее, вы можете использовать его и на C#!) http://msdn.microsoft.com/en-us/library/cakac7e6.aspx

Я пытался сделать пример для C# (добавьте ссылку на Microsoft.VisualBasic в ваш проект)

using System;
using System.IO;
using Microsoft.VisualBasic.FileIO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            TextReader reader = new StringReader("('ABCDEFG', 123542, 'XYZ 99,9')");
            TextFieldParser fieldParser = new TextFieldParser(reader);

            fieldParser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
            fieldParser.SetDelimiters(",");

            String[] currentRow; 

            while (!fieldParser.EndOfData)
            {
                try
                {
                     currentRow = fieldParser.ReadFields();

                     foreach(String currentField in currentRow)
                     {
                        Console.WriteLine(currentField);                        
                     }
                }
                catch (MalformedLineException e)
                {
                    Console.WriteLine("Line {0} is not valid and will be skipped.", e);
               }

            } 

        }
    }
}

[Edit2]: нашел еще один, который может быть полезен здесь: http://www.codeproject.com/KB/database/CsvReader.aspx

-- reinhard

6
ответ дан 27 November 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: