Замена символа в многострочной строке с сохранением минимальной ширины строки

1

У меня есть многострочная строка, которая должна содержать длину 3. Однако белые пробелы застревают в одной или нескольких строках, и я хочу их удалить:

s = '''123
4 56
7 8'''

print(s)

lines = s.splitlines()
for idx, line in enumerate(lines):
    for _ in range(len(line) - len('123')):
        lines[idx] = line.replace(' ', '')

s = '\n'.join(lines)
print(s)


123
4 56    # problematic line
7 8
123
456     # fixed line
7 8     # this line should not change, as the white-space here does not make the line longer than length 3

Это дает мне желаемый результат (т.е. Все строки имеют длину 3 (я не хочу удалять любые пробелы, которые не нарушают правило длины 3), и удаляются только белые пробелы), но есть ли лучший способ сделать это?

  • 0
    Вы против использования регулярных выражений?
  • 0
    Вовсе нет, но вы можете иметь регулярное выражение, которое проверяет длину строки перед применением?
Теги:
string

2 ответа

5
Лучший ответ

Вы можете передать count как аргумент str.replace чтобы указать максимальную сумму замены.

Для сокращения кода также можно использовать понимание списка.

s = '''123
4 56
7 8'''

lines = [line.replace(' ', '', len(line) - 3) for line in s.splitlines()]

s = '\n'.join(lines)

print(s)

Обратите внимание, что отрицательный count просто интерпретируется как 0, поэтому хорошо использовать len(line) - 3 хотя он может вернуть отрицательное значение.

Выход

123
456
7 8
1

Это один из подходов.

Демо - версия:

s = '''123
4 56
7 8
123
456
7 8'''

print("\n".join(i.replace(' ', '') if len(i) != 3 else i for i in s.splitlines()))

Выход:

123
456
7 8
123
456
7 8

Ещё вопросы

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