Поиск пробелов вне кавычек

Рейтинг: 0Ответов: 2Опубликовано: 05.01.2015

Здравствуйте.

Как в C# с помощью Regex найти лишние пробелы (больше одного) вне кавычек?

К примеру, есть текст: Какой то "Текст с пробелами" и кавычками.

Должно быть на выходе: Какой то "Текст с пробелами" и кавычками.

Знаю лишь, что формула ("([^"]+)") ищет текст в кавычках, а (\ +) - лишние пробелы. Но мне не удается 'инвертировать' первую формулу.

Ответы

▲ 2

http://ideone.com/DDcTH0

Regex.Replace(text, @"(""[^""]*"")|([^ ""]+)|( )+", @"$1$2$3")
// JS: text.replace(/("[^"]*")|([^ "]+)|( )+/g, "$1$2$3")
▲ 1

Можно сделать так:

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    public class Program
    {
        public static void Main()
        {
            const string text = "Какой то  \"Текст   с пробелами\" и   кавычками. И   еще   немного    \"Текста    \" с   кавычками     и \"  без?  \"    !";
            var newText = Regex.Replace(text, "(?<=^[^\"]*(\"[^\"]*\"[^\"]*?)*)\\s{2,}", " ");
            Console.WriteLine(newText);
        }
    }
}