긴 텍스트 문자열에서 모든 줄 바꿈 제거


128

기본적으로 사용자에게 텍스트 문자열을 콘솔에 입력하도록 요청하고 있지만 문자열이 매우 길고 많은 줄 바꿈이 포함됩니다. 사용자의 문자열을 가져와 모든 줄 바꿈을 삭제하여 한 줄의 텍스트로 만드는 방법은 무엇입니까? 문자열을 얻는 방법은 매우 간단합니다.

string = raw_input("Please enter string: ")

사용자로부터 문자열을 잡아야하는 다른 방법이 있습니까? Mac에서 Python 2.7.4를 실행하고 있습니다.

추신 : 분명히 나는 ​​멍청한 사람이므로 솔루션이 가장 효율적이지 않더라도 가장 간단한 구문을 사용하는 솔루션을 고맙게 생각합니다.



4
@NicYoung, 비슷하지만 다릅니다. strip문자열 내부 가 아닌 문자열의 시작과 끝에서 공백을 제거 합니다 ...
Daren Thomas

답변:


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캐리지 리턴을 나타냅니다 (창문을 사용하는 경우 이러한 정보를 얻을 수 있으며 두 번째 replace가이를 처리합니다!).

원래:

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

또한 변수를 호출하는 것은 좋지 않습니다 . string이는 모듈을 가리기 때문 string입니다. 피하고 싶지만 가끔 사용하고 싶은 또 다른 이름 : file. 같은 이유로.


완벽하게 작동했습니다. 어리석은 질문에 대해 죄송합니다! 내 초기 해결책은 문자열을 나열하고 \ n의 모든 인스턴스를 찾는 것이었지만 목록에 목록 항목 당 문자가 1 개 밖에 없기 때문에 검색은 \ 또는 n 중 하나를 찾지 만 동일한 목록에서 둘 다 찾지 못하기 때문에 계속 false를 반환했습니다. 기입.
Ian Zane

4
이 답변은 \r캐리지 리턴을 언급하기 때문에 나에게 매우 유용 합니다. 제거하기 위해 모든 방법을 시도 \n했지만 여전히 \r문자를 캡처하지 못했습니다 .
클레이

1
이것은 보통 나를 위해 일합니다-string.replace ( '\ r \ n', '')). 대부분의 로그 / 텍스트 편집기 파일은 새 줄에 대해이 형식을 따르는 경향이 있습니다.
Quest Monger 2014 년

1
변수 이름을 사용하지 않는다는 점을 지적 string했지만 비슷한 이유로 변수 이름을 사용하고 싶지 않습니다 str.
tscizzle

2
이 리눅스 파일에 대한 이러한 접근 방식의 작품 @information_interchange \n하지만를 \r\n.
물 자체

45

문자열 바꾸기를 사용해 볼 수 있습니다.

string = string.replace('\r', '').replace('\n', '')

일부 텍스트에 문제가 있습니다. rstrip ()을 사용하려고했지만 작동하지 않았습니다. 나는 replace ()를 사용한다.
Bruno Gomes

25

연속 된 공백을 단일 구분 기호 (줄 바꿈 및 탭 포함)로 처리하는 구분자 인수없이 문자열을 분할 할 수 있습니다. 그런 다음 스페이스를 사용하여 참여하십시오.

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')

여기에서 더 많은 것을 읽으 십시오


3
나는 이것에 물렸다. rstrip에 \ n을 지정하면 \ r이 실패합니다. 아무것도 지정하지 않으면 공백, \ t 및 기타 항목이 잘립니다. 당신은 사용해야합니다rstrip("\r\n")
xbello

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'"시도
Mike Gleen

2

누군가를 사용하기로 결정했다면 대신 replace시도해야 r'\n'합니다.'\n'

mystring = mystring.replace(r'\n', ' ').replace(r'\r', '')

왜? 왜 이것이 좋은 생각인지 막연하게 기억하지만 문서화해야합니다.
Martin Burch

1
제 경우에는 다음을 수행해야했습니다. 1. DB에서 HTML 코드 가져 오기 2. HTML에서 필요한 텍스트 가져 오기 3. 텍스트에서 모든 줄 바꿈 제거 4. 스프레드 시트 문서에 편집 된 텍스트 삽입 그리고 내가하지 않는 한 제대로 작동하지 않았습니다. 사용됨 r( "원시 문자열 리터럴"). 불행히도 이유를 모르겠습니다.)
Anar Salimkhanov

1

rstrip의 문제는 모든 경우에서 작동하지 않는다는 것입니다 (내가 거의 본 적이없는 것처럼). 대신-text = text.replace ( "\ n", "")를 사용할 수 있습니다. 그러면 공백이있는 모든 새 줄이 \ n 제거됩니다.

당신의 찬성에 미리 감사드립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.