programing

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

abcjava 2023. 7. 15. 00:29
반응형

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

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

string = raw_input("Please enter string: ")

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

추신: 분명히 저는 초보자이기 때문에 솔루션이 가장 효율적이지 않더라도 가장 간단한 구문을 사용하는 것은 감사할 것입니다.

줄 바꿈을 입력하는 방법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캐리지 리턴을 나타냅니다(창가에 있는 경우, 이것들과 1초를 받을 수 있습니다).replace당신을 위해 그것들을 처리할 것입니다!).

기본적으로:

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

또한 변수를 호출하는 것은 좋지 않습니다.string이것이 모듈에 그림자를 드리우므로string피하고 싶지만 가끔 사용하고 싶은 다른 이름:file같은 이유로.

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

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

구분 기호 없이 문자열을 분할할 수 있습니다. 이렇게 하면 연속된 공백이 단일 구분 기호(새 줄 및 탭 포함)로 처리됩니다.그런 다음 공백을 사용하여 가입합니다.

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

파이썬에서 캐노닉한 대답은 다음과 같습니다.

s = ''.join(s.splitlines())

문자열을 줄로 분할합니다(Python이 자체 모범 사례에 따라 수행할 수 있도록 허용).그런 다음 병합합니다.여기에는 두 가지 가능성이 있습니다.

  • 새 줄을 공백으로 바꿉니다(' '.join())
  • 또는 공백 없이(''.join())

을 기준으로 업데이트됨Xbello댓글:

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

자세한 내용은 여기를

다른 옵션은 정규식입니다.

>>> import re
>>> re.sub("\n|\r", "", "Foo\n\rbar\n\rbaz\n\r")
'Foobarbaz'

누군가 사용하기로 결정한 경우replace당신은 노력해야 합니다.r'\n'대신'\n'

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

고려한 방법

  • 문자열의 시작/끝에 추가적인 흰색 문자
  • 모든 행의 시작/끝에 추가적인 흰색 문자
  • 다양한 종점 문자

예를 들어 지저분할 수 있는 여러 줄의 문자열이 필요합니다.

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 '

정규식이 가장 빠른 방법입니다.

s='''some kind   of
string with a bunch\r of

  
 extra spaces in   it'''

re.sub(r'\s(?=\s)','',re.sub(r'\s',' ',s))

결과:

'some kind of string with a bunch of extra spaces in it'

rstrip()(나 자신이 거의 보지 못했듯이) 모든 경우에 효과가 없다는 것입니다.을 사용할 수 .

text = text.replace("\n"," ")

새 줄이 됩니다.'\n'띄엄띄엄

당신은 정말로 모든 징후를 제거할 필요가 없습니다: lf cr crlf.

# Pythonic:
r'\n', r'\r', r'\r\n' 

일부 텍스트는 반드시 중단되어야 하지만, 특정 문장을 함께 유지하기 위해서는 아마도 끊어진 선을 연결해야 할 것입니다.

따라서 줄 바꿈은 priod, 세미콜론, 콜론 뒤에 발생하지만 쉼표 뒤에는 발생하지 않습니다.

나의 코드는 위의 조건을 고려합니다.pdfs에서 복사한 텍스트와 잘 작동합니다.즐겨보세요!:

def unbreak_pdf_text(raw_text):
    """ the newline careful sign removal tool

    Args:
        raw_text (str): string containing unwanted newline signs: \\n or \\r or \\r\\n
        e.g. imported from OCR or copied from a pdf document.

    Returns:
        _type_: _description_
    """
    pat = re.compile((r"[, \w]\n|[, \w]\r|[, \w]\r\n"))
    breaks = re.finditer(pat, raw_text)

    processed_text = raw_text
    raw_text = None

    for i in breaks:
        processed_text = processed_text.replace(i.group(), i.group()[0]+" ")

    return processed_text

언급URL : https://stackoverflow.com/questions/16566268/remove-all-line-breaks-from-a-long-string-of-text

반응형