2013-12-05 5 views
0

Рассмотрим следующую строку:Замена рисунка в C#

##snapshot 

string s = "a,,,b,c,,,,d"; 

### 

Я пытаюсь получить следующий результат:

"a,null,null,b,c,null,null,null,d"; 

Другими словами, если нет ничего между двумя запятыми, я бы как заменить это на «null». Я попытался следующие:

using System.Text.RegularExpressions;  

### snapshot 

Regex r = new Regex("[\\,\\,]"); 
Console.WriteLine(r.Replace(s, ",null,")); 

и я получаю:

enter image description here

Я много о регулярных выражений, не знаю, и это лучшее, что я мог придумать, но результат неправильно. Может ли кто-нибудь помочь? Спасибо!

+0

Вы буквально печать "нулевой". Попробуйте заменить «' »' ' – Tico

+0

Это моя точка зрения. Я хочу буквально напечатать нуль. – Mayou

+0

Теперь это имеет смысл;) – Tico

ответ

5

Используйте позитивный взгляд на будущее:

string s = "a,,,b,c,,,,d"; 
var replaced = Regex.Replace(s, ",(?=,)", ",null"); 
Console.WriteLine(replaced); 
+0

Простой и совершенный! Благодаря!! – Mayou

+0

Небольшое продолжение. Можно ли изменить регулярное выражение, добавив логику: если запятая находится в конце всей строки, замените эту запятую на «, null» ?? Другими словами, если строка была '" a ,, b, c, "', я бы хотел, чтобы результат был '" a, null, b, c, null ". – Mayou

+0

Вот что я пробовал: 'Regex.Replace (Regex.Replace (s,", (? =,) ",", Null "),", $ ",", null ")' – Mayou

1

[] operator в регулярных выражениях означает «любой из этих». Удалите их, вы хотите совместить с ,, буквально.

Или просто используйте Replace, не нужно регулярных выражений.

+0

Удаление '[]' вызывает исключение –

+0

@Tijesunimi какой? У меня нет возможности проверить это, но документы, похоже, говорят, что это должно сработать. –

+0

Вы отвечаете, что он должен использовать 'Regex r = new Regex (" \\, \\, ");'. Если я использую это, он выкинет исключение –

2

Вам не нужно регулярное выражение для этой операции

string s = "a,,,b,c,,,,d"; 
var str = String.Join(",", s.Split(',') 
          .Select(x => String.IsNullOrEmpty(x) ? "null" : x)); 
0

Один подход был бы так:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string s = "a,,,b,c,,,,d"; 
     Console.WriteLine(string.Join(",", 
      s.Split(',') 
      .Select(c => string.IsNullOrEmpty(c) ? "null" : c))); 
    } 
} 
0

Если вы» повторно разрешены другие параметры, вы просто просто разделяете и присоединяете обработанные значения следующим образом:

string s = "a,,,b,c,,,,d"; 
var cleaned = s.Split(',').Select(x => string.IsNullOrEmpty(x) ? "null" : x); 
var result = string.Join(",", cleaned); 
1
/\,(?=\,)/g 

использовать это для позитивного взгляда вперед и заменить его, используя C# код. with ', null'

1

Возможно, более интуитивно понятный, чем некоторые ответы - продолжайте проверять, есть ли что-то, что нужно заменить до завершения. (Потому что вы используете «результаты» на каждый матч):

string s = "a,,,b,c,,,,d"; 

    while (Regex.Match(s,"(,,)").Success == true) 
    s = Regex.Replace(s,"(,,)",",null,"); 
0
using System.IO; 
using System.Text; 
using System.Text.RegularExpressions; 
using System; 

public class Example 
{ 
    public static void Main() 
    { 
     string str = @"a,,,b,c,,,,d"; 
     Regex pattern = new Regex(@",,"); 
     string replacement = @",null,"; 
     Match m = pattern.Match(str); 
     while (m.Success) 
     { 
      str = pattern.Replace(str, replacement); 
      m = pattern.Match(str); 
     } 

     Console.WriteLine(str); 
    } 
} 
+0

Это точно так же, как мой пример. – Hogan

+0

@ Хоган Великие мысли думают одинаково :) – David

2

Если будет как CSV-файл, но вы должны заполнить пустые цв ты мог бы использовать и предпросмотр назад '.

находка: (?<=^|,)(?=,|$)
заменить "null"

Или, если пробелы, связанные между запятыми
находкой: (?<=^|,)\s*(?=,|$)
заменить "null"

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