Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Разделить строку CSV

Автор вопроса: CommunityОтветов: 3

Как бы я разделил следующую строку?

test, 7535, '1,830,000', '5,000,000'

Результат должен быть

test
7535
'1,830,000'
'5,000,000'

Я попробую:

Dim S() as string = mystring.split(",")

Но я понимаю,

test
7535
'1
830
000'
'5
000
000'

Спасибо

csvstringsplit

Ответы

Ответ 1 · рейтинг 8 · Vinko Vrsalovic

Не анализируйте CSV вручную, если у вас есть удобные доступные качественные библиотеки. Пожалуйста!

Парсинг CSV имеет много потенциальных ловушек, и эта библиотека, согласно моему тестированию, аккуратно решает большинство из них.

Тем не менее, если это разовая задача, а строки всегда такие, как в вашем примере, вы можете использовать регулярное выражение, например так (синтаксис VB.NET может быть неправильным, исправьте):

        Dim s as string = "1, 2, '1,233,333', '8,444,555'";
        Dim r as Regex = new Regex(",\s");
        Dim re() as string = r.Split(s);

Это рассчитано на то, что после разделительной запятой всегда есть пробел и что между запятыми нет пробела. Если это не всегда так, вы можете:

  • Сделайте регулярное выражение более сложным (см. здесь чтобы увидеть, насколько грязными могут быть вещи)
  • Пользуйтесь библиотекой и будьте счастливее

Ответ 2 · рейтинг 2 · Stefan

Если только для этого примера не нужно использовать регулярное выражение, Split-функция (входит в состав Microsoft.VisualBasic.Strings) может принимать строку в качестве разделителя, поэтому просто введите ", ", чтобы поймать только те запятые, после которых есть пробел:

    Dim s As String = "1, 2, '1,233,333', '8,444,555'"
    Dim r() As String = Split(s, ", ")

Ответ 3 · iburlakov

Попробуйте использовать это регулярное выражение: "('([^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?"

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы