删除一长串文本中的所有换行符


128

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

string = raw_input("Please enter string: ")

我应该从用户那里获取字符串吗?我在Mac上运行Python 2.7.4。

PS显然,我是一个菜鸟,所以即使解决方案不是最有效的,也应感谢使用最简单语法的解决方案。



4
@NicYoung,那是相似但不同的。strip删除字符串开头和结尾而不是字符串内部的空格...
Daren Thomas

Answers:


214

您如何输入换行符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 2014年

1
您指出不使用变量名string,但是出于类似的原因,您也不想使用变量名str
tscizzle 2015年

2
@information_interchange此方法适用于具有\n但没有的Linux文件\r\n
Noumenon

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


很好的想法,因为规范化了制表符,双
精度

15

根据Xbello评论更新:

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

在这里阅读更多


3
我只是被这个咬了。如果将\ n指定为rstrip,则\ r失败。如果您不指定任何内容,则会修剪空格,\ t以及其他可能的字符。您必须使用rstrip("\r\n")
xbello 2014年

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

为什么?我模糊地记得为什么这是一个好主意,但我们需要对其进行记录。
马丁·伯奇

1
就我而言,我需要这样做:1.从数据库中获取HTML代码2.从HTML中获取所需的文本3.从文本中删除所有换行符4.将编辑后的文本插入电子表格文档中,除非我同意,否则它将无法正常工作使用r(“原始字符串文字”)。不幸的是,我不知道为什么)
Anar Salimkhanov

1

rstrip的问题在于它不能在所有情况下都起作用(正如我本人所见的那样)。相反,您可以使用-text = text.replace(“ \ n”,“”),这将删除所有带有空格的新行\ n。

预先感谢你们的支持。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.