Регулярное выражение для разделения на пробелы, кроме как в кавычках - PullRequest
66 голосов
/ 16 февраля 2009

Я бы хотел использовать метод .Net Regex.Split, чтобы разбить эту входную строку на массив. Он должен разделяться пробелами, если он не заключен в кавычки. Входной сигнал: Вот "моя строка", она имеет "шесть матчей"

Ожидаемый результат:

  1. Здесь
  2. есть
  3. моя строка
  4. он
  5. есть
  6. шесть матчей

Какой шаблон мне нужен? Также мне нужно указать какие-либо RegexOptions?

Ответы [ 11 ]

0 голосов
/ 16 февраля 2009

Взгляните на " Функция разбиения LSteinle, которая поддерживает классификаторы текста " в проекте Code

Вот фрагмент его проекта, который вас интересует.

using System.Text.RegularExpressions;

public string[] Split(string expression, string delimiter, string qualifier, bool ignoreCase)
{
    string _Statement = String.Format("{0}(?=(?:[^{1}]*{1}[^{1}]*{1})*(?![^{1}]*{1}))", 
                        Regex.Escape(delimiter), Regex.Escape(qualifier));

    RegexOptions _Options = RegexOptions.Compiled | RegexOptions.Multiline;
    if (ignoreCase) _Options = _Options | RegexOptions.IgnoreCase;

    Regex _Expression = New Regex(_Statement, _Options);
    return _Expression.Split(expression);
}

Просто следите за вызовом этого в цикле, поскольку он создает и компилирует оператор Regex каждый раз, когда вы вызываете его. Поэтому, если вам нужно вызывать его несколько раз, я бы посмотрел на создание кеша Regex какого-то рода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...