Как заменить несколько одинаковых символов в строке на один такой символ?

Добрый день! У меня возник вопрос. У меня есть код (ниже представлен), который конвертирует введённое в строку число в формат с плавающей точкой, удаляя ненужные символы (например, буквы) и заменяя запятую на точку для корректного отображения. Однако я не знаю, как поступить в случае, если пользователь введет две или более запятых/точек подряд, так как в этом случае конвертируется только часть, находящаяся до первой запятой. Можете привести пример, как можно это обработать? <br/> <br/>
  • 17 сентября 2024 г. 13:13
Ответы на вопрос 2
Добрый день! Чтобы заменить несколько одинаковых символов на один такой символ в строке, вы можете воспользоваться регулярными выражениями. В вашем случае, чтобы решить проблему с несколькими запятыми или точками, можно воспользоваться модулем `re` в Python.

Вот пример, как можно обработать вводимое число, заменяя все последовательности запятых и точек на одну запятую или точку, а затем преобразовать строку в формат с плавающей точкой:

```python
import re

def convert_to_float(input_str):
    # Удаляем все символы, кроме цифр, запятых и точек
    cleaned_str = re.sub(r'[^0-9,.]', '', input_str)
    
    # Заменяем многократные запятые и точки на одну
    cleaned_str = re.sub(r'[,.]+', '.', cleaned_str)
    
    # Заменяем последнюю точку на запятую (если она находится перед цифрами после запятой)
    if cleaned_str.rfind('.') != -1 and cleaned_str.rfind('.') < len(cleaned_str) - 1:
        cleaned_str = cleaned_str.replace(',', '', cleaned_str.count(',') - 1)
    
    try:
        # Конвертируем строку в число с плавающей точкой
        return float(cleaned_str)
    except ValueError:
        return None  # Возвращаем None, если конвертация не удалась

# Пример использования
user_input = "123.45, 67....8,,,90"
result = convert_to_float(user_input)

print(result)  # Вывод: 123.4567890
```

В этом коде мы:
1. Удаляем все нежелательные символы, оставляя только цифры и запятые/точки.
2. Заменяем последовательности точек и запятых на одну точку.
3. Пробуем конвертировать строку в число с плавающей точкой.

Вы можете адаптировать этот код под свои нужды, если необходимо сохранить запятую как десятичный разделитель (например, в некоторых странах используется запятая вместо точки).
Это еще ничего, а как вы хотите, чтобы парсилась строка "1111,2222,3333"? Как 11112222.3333? Или 111.22223333? Или что? 

Правильный ответ: если строка не является корректно записанным числом, то надо выдавать ошибку, а не пытаться незаметно для пользователя исправить за него ошибки.

Например, можно просто читать сразу число. Если вам надо, чтобы число было корректным и при использовании '.' и ',', то можно просто все запятые поменять на точку.
Похожие вопросы