Удалите все разрывы строк из длинной строки текста

128

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

string = raw_input("Please enter string: ")

Есть ли другой способ получить строку у пользователя? Я запускаю Python 2.7.4 на Mac.

PS Ясно, что я новичок, поэтому, даже если решение не самое эффективное, будет оценено то, в котором используется самый простой синтаксис.

Ян Зейн
источник
4
@NicYoung, это похоже, но по-другому. stripудаляет пробелы в начале и конце строки, а не внутри строки ...
Дарен Томас

Ответы:

215

Как вводить перенос строки с помощью raw_input? Но если у вас есть строка с некоторыми символами, от которых вы хотите избавиться, только от replaceних.

>>> mystr = raw_input('please enter string: ')
please enter string: hello world, how do i enter line breaks?
>>> # pressing enter didn't work...
...
>>> mystr
'hello world, how do i enter line breaks?'
>>> mystr.replace(' ', '')
'helloworld,howdoienterlinebreaks?'
>>>

В приведенном выше примере я заменил все пробелы. Строка '\n'представляет собой символы новой строки. И \rпредставляет собой возврат каретки (если вы работаете в Windows, вы можете получить их, и второй replaceобработает их за вас!).

в принципе:

# you probably want to use a space ' ' to replace `\n`
mystring = mystring.replace('\n', ' ').replace('\r', '')

Также обратите внимание, что вызывать вашу переменную - плохая идея string, поскольку это затеняет модуль string. Другое название я бы избежать , но хотелось бы использовать иногда: file. По той же причине.

Дарен Томас
источник
Сработало отлично, извините за глупый вопрос! Мое первоначальное решение заключалось в том, чтобы перечислить строку и найти все экземпляры \ n, но поскольку в списке был только 1 символ на запись в списке, поиск продолжал возвращать false, потому что он находил либо \, либо n, но не оба в одном списке запись.
Ян Зейн
4
Этот ответ очень полезен для меня, потому что в нем упоминается \rвозврат каретки. Я испробовал все методы для удаления, \nно все еще не захватил \rперсонажей.
Clay
1
Обычно это работает за меня - string.replace ('\ r \ n', '')). Большинство файлов журналов / текстовых редакторов имеют тенденцию следовать этому формату для новых строк.
Quest Monger
1
Вы указываете, что не используете имя переменной string, но по той же причине вы не хотите использовать имя переменной str.
tscizzle
2
@information_interchange Этот подход работает с файлами Linux, у которых есть, \nно нет \r\n.
Ноумен
45

Вы можете попробовать заменить строку:

string = string.replace('\r', '').replace('\n', '')
Константин Динев
источник
У меня возникла проблема с некоторыми текстами. Я пробовал использовать rstrip (), но не сработало. Я использую replace ().
Bruno Gomes,
25

Вы можете разделить строку без разделителя arg, который будет рассматривать последовательные пробелы как один разделитель (включая символы новой строки и табуляции). Затем присоединитесь, используя пробел:

In : " ".join("\n\nsome    text \r\n with multiple whitespace".split())
Out: 'some text with multiple whitespace'

https://docs.python.org/2/library/stdtypes.html#str.split

Шон
источник
Очень хороший ide, потому что нормализуем также табуляции, двойные пробелы и так далее +1
daitangio
15

обновлено на основе Xbelloкомментария:

string = my_string.rstrip('\r\n')

подробнее здесь

tokhi
источник
3
Меня это только что укусило. Если вы укажете \ n для rstrip, \ r завершится ошибкой. Если вы не укажете ничего, пробелы, \ t и, возможно, другие будут обрезаны. Вы должны использоватьrstrip("\r\n")
xbello 03
1
была строка, которой просто rstrip('\r\n')не хватало, и пришлось пойти с:my_string.rstrip('\r\n').replace('\n', ' ')
MMT
8

Другой вариант - регулярное выражение:

>>> import re
>>> re.sub("\n|\r", "", "Foo\n\rbar\n\rbaz\n\r")
'Foobarbaz'
Нил
источник
было бы неплохо получить дополнительную информацию о том, как сопоставить последовательные разрывы строк r'[\n\r]+'или даже r'\s+'заменить любые пробелы одним пробелом.
Risadinha
3

Метод с учетом

  • дополнительные белые символы в начале / конце строки
  • дополнительные белые символы в начале / конце каждой строки
  • различные символы конца строки

требуется такая многострочная строка, которая может быть беспорядочной, например

test_str = '\nhej ho \n aaa\r\n   a\n '

и производит красивую однострочную строку

>>> ' '.join([line.strip() for line in test_str.strip().splitlines()])
'hej ho aaa a'

ОБНОВЛЕНИЕ: чтобы исправить несколько символов новой строки, создающих избыточные пробелы:

' '.join([line.strip() for line in test_str.strip().splitlines() if line.strip()])

Это также работает для следующих test_str = '\nhej ho \n aaa\r\n\n\n\n\n a\n '

Камил Нечай
источник
Это не обрабатывает случай непрерывного перевода строки в середине строки. Два перевода строки приводят к появлению двух смежных пробелов на выходе. Попробуйте "test_str = '\ nhej ho \ n aaa \ r \ n \ na \ n'"
Майк Глин
2

Если кто-то решит использовать replace, попробуйте r'\n'вместо этого'\n'

mystring = mystring.replace(r'\n', ' ').replace(r'\r', '')
Анар Салимханов
источник
Зачем? Я смутно помню, почему это хорошая идея, но нам нужно ее задокументировать.
Мартин Берч,
1
В моем случае мне нужно было сделать следующее: 1. Получить HTML-код из БД. 2. Получить необходимый текст из HTML. 3. Удалить все символы новой строки из текста. 4. Вставить отредактированный текст в электронную таблицу. И это не сработало должным образом, если я не использовано r("необработанный строковый литерал"). К сожалению, не знаю почему)
Анар Салимханов
1

Проблема с rstrip в том, что он работает не во всех случаях (как я сам видел несколько). Вместо этого вы можете использовать - text = text.replace ("\ n", ""), это удалит всю новую строку \ n с пробелом.

Заранее спасибо, ребята, за ваши голоса.

Анкит Двиведи
источник