Только запятые, окруженные цифрами в строке

Я использую StreamReader для чтения каждой строки файла CSV в строку. Когда я обрабатываю каждую строку, мне нужно удалить все запятые, которые ТОЛЬКО окружены другими числами.

Например, если строка была:

"textfield1", "textfield2", "100.00", "1,070.00"

Мне нужно было бы только убрать запятую из «1070,00» из всей этой строки, в результате чего:

"textfield1", "textfield2", "100.00", "1070.00"

Каждая строка, прочитанная из файла CSV, может отличаться количеством полей, длиной и т. д., поэтому мне нужно использовать что-то (может быть, регулярные выражения?), Которое просматривает всю строку без жесткого кодирования местоположения или полного удаления всех запятых.

Вот подход, который я пробовал:

StreamReader sr = new StreamReader(strInputFile);
string nextLine = sr.ReadLine();     

try
{
    while ((nextLine = sr.ReadLine()) != null)
    {
        string rawtext = nextLine.Replace("[0-9]"+","+"[0-9]" , "[0-9]"+"[0-9]");

        // ....rest of code
    }
}

Очевидно, это не работает, потому что я не понимаю, как это сделать :)
Я новичок в C# и неопытен в Regex, так что, надеюсь, это относительно просто.


person overlook77    schedule 26.06.2013    source источник
comment
Проблема в том, что "1,070.00" становится "[0-9][0-9]70.00", верно? просто чтобы убедиться, что мы собираемся ответить на правильный вопрос.   -  person Geeky Guy    schedule 26.06.2013
comment
Также вам не нужно добавлять "[0-9]" + "," + "[0-9]" таким образом. Вы можете написать одну строку: "[0-9],[0-9]". Однако даже если вы продолжите делать это так, как делаете, компилятор увидит, что это фиксированные строки, и сделает их одной строкой только в сборке.   -  person Geeky Guy    schedule 26.06.2013
comment
Любая причина, по которой вы просто не делаете Decimal.TryParse?   -  person Conrad Frix    schedule 26.06.2013
comment
Если вы читаете CSV, вам, вероятно, следует использовать TextFieldParser: msdn.microsoft.com/en-us/library/   -  person Jim Mischel    schedule 26.06.2013


Ответы (1)


Похоже, вы хотите использовать регулярное выражение:

string rawtext = Regex.Replace(nextLine, @"(\d),(\d)", "$1$2");

Или этот эквивалентный шаблон:

string rawtext = Regex.Replace(input, @"(?<=\d),(?=\d)", "");
person p.s.w.g    schedule 26.06.2013