Regex, чтобы разрешить только первое вхождение символа

2

У меня есть некоторые формы, в которых пользователи будут вводить некоторые числа, я хочу, чтобы они не вводили более одной запятой в эту строку

Я сделал что-то вроде этого

var input = "1,,,,2";
var value = Regex.Replace(input, ",{1,}", ".");

Это приведет к выходу 1.2, что является правильным. Но если я введу

var input = 1,,,2,3,,,4,5,,6

все проваливается

Какой идентификатор должен делать, это сформировать последнюю версию ввода для 1.23456

Любые советы?

Спасибо

  • 0
    Не могли бы вы вызвать функцию Replace () дважды, один раз для замены первой запятой и еще раз для удаления остальных запятых?
  • 2
    Почему вы заменяете запятые точкой? (Я спрашиваю , потому что я надеюсь , что вы не преобразование числа в шведском формате , как 3 995 000,43 в США формат 3,995,000.43 , так что вы можете использовать decimal.Parse , вместо того , чтобы использовать decimal.Parse со шведским CultureInfo.)
Показать ещё 1 комментарий
Теги:

2 ответа

2
Лучший ответ
Regex.Replace (input, @"(?<=^\d+),", ".").Replace (",", "");

Это заменяет первую запятую , периодом ., затем заменяет остальные запятые на empty.

1

Используйте это регулярное выражение: (?<!,[^,]*?),+

var res = Regex.Replace(input, @"(?<!,[^,]*?),+", ".").Replace(",", string.Empty);

Или этот код:

var res = Regex.Replace(input, @"(?<!,[^,]*?)(,+)|(,+)", 
    m => m.Groups[1].Success ? "." : string.Empty);

Выход: 1.23456

  • 0
    Это работает просто fint, но метод агента-J немного проще

Ещё вопросы

Сообщество Overcoder
Наверх
Меню