Это входная строка «23x + y-34 x + y + 21x - 3y2-3x-y + 2». Я хочу окружить каждый символ «+» и «-» пробелами, но только в том случае, если они не полностью закрашены слева или справа. Поэтому моя входная строка будет выглядеть так: «23x + y - 34 x + y + 21x - 3y2 - 3x - y + 2». Я написал этот код, который делает работу:
Regex reg1 = new Regex(@"\+(?! )|\-(?! )");
input = reg1.Replace(input, delegate(Match m) { return m.Value + " "; });
Regex reg2 = new Regex(@"(?<! )\+|(?<! )\-");
input = reg2.Replace(input, delegate(Match m) { return " " + m.Value; });
Объяснение:
reg1 // Соответствует '+', за которым следует любой символ не '' (пробел) или то же самое для '-'
reg2 // То же самое, только то, что я соответствую '+' или '-', не предшествуя '' (пробел) *
делегат 1 и 2 просто вставьте "" до и после m.Value (значение соответствия)
Вопрос в том, есть ли способ создать только одно регулярное выражение и один делегат? то есть сделать эту работу за один шаг? Я новичок в регулярных выражениях и хочу научиться эффективному способу.