Я не сейчас , почему разработчики java-языка решили добавить оператор new
к java-языку, но я не хочу его пропустить. Даже , если он может быть избыточным , если не разрешено давать классы, методы и поля с тем же именем, как и другие, которые уже были указаны в их ответах:
Потому что - это значительно улучшает читаемость. Каждый раз, когда я читал этот оператор new
, я сразу понял, что рождается новый объект.
Попробуйте метод rstrip()
(см. документ Python 2 и Python 3 )
>>> 'test string\n'.rstrip()
'test string'
полосы метода Python rstrip()
весь виды запаздывающего пробела по умолчанию, не всего одна новая строка как Perl делает с [1 111] chomp
.
>>> 'test string \n \r\n\n\r \n\n'.rstrip()
'test string'
Для разделения только новых строк:
>>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
'test string \n \r\n\n\r '
существуют также методы lstrip()
и strip()
:
>>> s = " \n\r\n \n abc def \n\r\n \n "
>>> s.strip()
'abc def'
>>> s.lstrip()
'abc def \n\r\n \n '
>>> s.rstrip()
' \n\r\n \n abc def'
Обратите внимание, что rstrip не действует точно как Perl, чавкают (), потому что это не изменяет строку. Таким образом, в Perl:
$x="a\n";
chomp $x
результаты в $x
являющийся "a"
.
, но в Python:
x="a\n"
x.rstrip()
будет означать, что значение x
все еще "a\n"
. Даже x=x.rstrip()
не всегда дает тот же результат, как он разделяет весь пробел от конца строки, не всего одну новую строку самое большее.
Канонический способ разделить символы конца строки (EOL) состоит в том, чтобы использовать строку rstrip () метод, удаляющий любое запаздывание \r или \n. Вот примеры для Mac, Windows и символов Unix EOL.
>>> 'Mac EOL\r'.rstrip('\r\n')
'Mac EOL'
>>> 'Windows EOL\r\n'.rstrip('\r\n')
'Windows EOL'
>>> 'Unix EOL\n'.rstrip('\r\n')
'Unix EOL'
Используя '\r\n', поскольку параметр к rstrip означает, что это разделит любую запаздывающую комбинацию '\r' или '\n'. Вот почему это работает во всех трех случаях выше.
Этот нюанс имеет значение в редких случаях. Например, я когда-то должен был обработать текстовый файл, который содержал сообщение HL7. Стандарт HL7 требует запаздывания '\r' как его символ EOL. Машина Windows, на которой я использовал это сообщение, добавила свой собственный '\r\n' символ EOL. Поэтому конец каждой строки был похож на '\r\r\n'. Используя rstrip ('\r\n') снял бы весь '\r\r\n', который не является тем, что я хотел. В этом случае я просто отрезал последние два символа вместо этого.
Примечание, что в отличие от Perl chomp
функция, это разделит все указанные символы в конце строки, не всего один:
>>> "Hello\n\n\n".rstrip("\n")
"Hello"
И я сказал бы, что "pythonic" способом получить строки без запаздывающих символов новой строки является splitlines ().
>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']
s = '''Hello World \t\n\r\tHi There'''
# import the module string
import string
# use the method translate to convert
s.translate({ord(c): None for c in string.whitespace}
>>'HelloWorldHiThere'
С Заменой regex
s = ''' Hello World
\t\n\r\tHi '''
print(re.sub(r"\s+", "", s), sep='') # \s matches all white spaces
>HelloWorldHi
\n, \t, \r
s.replace('\n', '').replace('\t','').replace('\r','')
>' Hello World Hi '
С regex
s = '''Hello World \t\n\r\tHi There'''
regex = re.compile(r'[\n\r\t]')
regex.sub("", s)
>'Hello World Hi There'
с Соединением
s = '''Hello World \t\n\r\tHi There'''
' '.join(s.split())
>'Hello World Hi There'
Сначала строки разделения затем присоединяются к ним любым разделителем, который Вы любите.
x = ' '.join(x.splitlines())
должен работать как очарование.
Я не программирую на Python, но я наткнулся на FAQ на python.org, в котором пропагандируется S.rstrip ("\ r \ n") для python 2.2 или новее.
Я мог бы использовать что-то вроде этого:
import os
s = s.rstrip(os.linesep)
Я думаю, Проблема с rstrip ("\ n")
заключается в том, что вы, вероятно, захотите убедиться, что разделитель строк является переносимым. (ходят слухи, что некоторые устаревшие системы используют "\ r \ n"
). Другая проблема заключается в том, что rstrip
удаляет повторяющиеся пробелы. Надеюсь, os.linesep
будет содержать правильные символы. выше работает для меня.