从长文本字符串中删除所有换行符

Ian*_*ane 113 python

基本上,我要求用户在控制台中输入一串文本,但字符串很长并包含许多换行符.如何获取用户的字符串并删除所有换行符以使其成为单行文本.我获取字符串的方法非常简单.

string = raw_input("Please enter string: ")
Run Code Online (Sandbox Code Playgroud)

有没有不同的方法我应该从用户那里抓取字符串?我在Mac上运行Python 2.7.4.

PS显然我是一个菜鸟,所以即使解决方案不是最有效的,使用最简单语法的解决方案也会受到赞赏.

Dar*_*mas 184

你怎么输入换行符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?'
>>>
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我替换了所有空格.该字符串'\n'表示换行符.并\r代表回车(如果你在窗户上,你可能会得到这些,第二个replace将为你处理它们!).

基本上:

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

另请注意,调用变量是一个坏主意string,因为这会影响模块string.另一个名字我会避免,但有时会喜欢使用:file.出于同样的原因.

  • 这个答案对我很有帮助,因为它提到了`\ r``回车.我已经尝试了所有方法来删除`\n`但仍然没有捕获`\ r`字符. (4认同)
  • @information_interchange这种方法适用于具有`\ n`但没有`\ r \ n`的Linux文件。 (2认同)

Kon*_*nev 35

您可以尝试使用字符串替换:

string = string.replace('\r', '').replace('\n', '')
Run Code Online (Sandbox Code Playgroud)


Sea*_*ean 21

您可以拆分不带分隔符arg的字符串,它将连续的空格视为单个分隔符(包括换行符和制表符).然后使用空格加入:

In : " ".join("\n\nsome    text \r\n with multiple whitespace".split())
Out: 'some text with multiple whitespace'
Run Code Online (Sandbox Code Playgroud)

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

  • 非常好的ide,因为还规范化了制表符、双空格等+1 (4认同)

tok*_*khi 14

根据Xbello评论更新:

string = my_string.rstrip('\r\n')
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多

  • 我一直被这个咬伤了.如果指定\n到rstrip,\ r \n会失败.如果不指定任何内容,则会修剪空格,\ t和其他可能的其他内容.你必须使用`rstrip("\ r \n")` (3认同)

Nei*_*eil 8

另一个选择是正则表达式:

>>> import re
>>> re.sub("\n|\r", "", "Foo\n\rbar\n\rbaz\n\r")
'Foobarbaz'
Run Code Online (Sandbox Code Playgroud)


Ana*_*nov 7

如果有人决定使用replace,你应该尝试r'\n'一下'\n'

mystring = mystring.replace(r'\n', ' ').replace(r'\r', '')
Run Code Online (Sandbox Code Playgroud)

  • **注意** `r'\r'` 将匹配文字“反斜杠 r”——而不是“回车”字符。根据您的输入数据使用其中之一。 (3认同)
  • 这个有效。其他人都没有。谢谢! (2认同)

fra*_*lau 6

法服答案,在Python,应该是:

s = ''.join(s.splitlines())
Run Code Online (Sandbox Code Playgroud)

它将字符串分成几行(让 Python 根据自己的最佳实践来做)。然后你合并它。这里有两种可能:

  • 用空格 ( ' '.join())替换换行符
  • 或没有空格 ( ''.join())

  • 这应该是公认的答案。它也是独立于操作系统的 (3认同)