2015-10-28 2 views
0

Мне нужно окружить все '&' с '|' в строке, но только в том случае, если еще нет '|' есть Например. следующие строки (-> ожидаемый результат):C# Regex заменить на вставку

  1. "Me & You" -> "Me | & | Вы"
  2. "Me | & Вы" -> не меняют
  3. "Me & | Вы" -> не меняют
  4. "Me & You" -> "Me | & | Вы"

Я понял, селектор (по крайней мере, я подумайте), который будет улавливать пример 1 и 4

[^|]&[^|] 

Но теперь я застрял, создав шаблон замены. Я знаю, мне нужно что-то скопировать часть до и после «&», но не может заставить ее работать. Ближайший результат был с

|&| 

но также удаляет carácter до и после «&»

Примечание: Я не могу использовать

s.Replace("&", "|&|").Replace("||&", "|&").Replace("&||", "&|"); 

как строка может уже содержать «| | & "в начале, и это все равно не приведет к ожидаемым результатам.

Любая альтернатива регулярному выражению также приветствуется!

+1

Вам нужно заменить & в начале/конце строки? Есть ли последовательные &? Если нет, используйте группы захвата: '([^ |]) & ([^ |])' и замените на '$ 1 | & | $ 2'. –

+0

Если вам нужны объяснения, я могу опубликовать свой ответ. Дайте мне знать, если вам это нужно. –

ответ

4

Вы должны использовать отрицательный предпросмотр и назад ':

(?<!\|)&(?!\|) 
+0

Он может быть заменен в начале и конце строки. –

+0

Спасибо, он делает то, что мне нужно. Не могли бы вы объяснить, как это работает. – Vanice

+0

Эта страница очень хорошо описывает образы: http://www.regular-expressions.info/lookaround.html – aquinas

3

Это должно срабатывать, ваши примеры:

static void Main(string[] args) 
{ 
    List<string> tests = new List<string>(); 

    tests.Add("Me&You"); 
    tests.Add("Me|&You"); 
    tests.Add("Me&|You"); 
    tests.Add("Me & You"); 

    foreach (var item in tests) 
    { 
     Console.WriteLine("{0}: {1}", item, 
          Regex.Replace(item, @"(?<!\|)&(?!\|)", "|&|")); 
    } 

    Console.ReadKey(); 

} 
1

Регулярное выражение для поиска \|?&\|? и заменить |&| бы простой подход , Это работает в начале и в конце строк, а также внутри линий.

Выражение ищет ноль или один | символов до и также после & и заменяет все четыре варианта (т.е. &, |&, |&| и &|) с нужным текстом. Выражение не пытается оставить существующие символы |, когда они верны.

+0

Но вопрос говорит: «Меня и тебя» не следует менять, это меняет его на «Я | и | Ты», – aquinas

Смежные вопросы