从字符串中删除所有换行符

64

我正在尝试从一个字符串中删除所有的换行符。我已经了解了如何做到这一点,但似乎由于某种原因我无法做到。以下是我所做的步骤:

string1 = "Hello \n World"
string2 = string1.strip('\n')
print string2

我仍然在输出中看到换行符。我已经尝试使用rstrip,但我仍然看到换行符。有人可以解释一下为什么我做错了吗?谢谢。


8
将变量命名为 str 并不一定是一个好主意,因为 str 是一个内置函数。 - Nadir Sampaoli
8个回答

104

strip仅从字符串的开头和结尾删除字符。您应该使用replace

str2 = str.replace("\n", "")
re.sub('\s{2,}', ' ', str) # To remove more than one space 

在我的情况下,它是 str2 = str.replace("\r", "")。 - aqavi_paracha
2
我认为 strip() 会从字符串的开头 结尾删除字符。 - venkatvb
1
非常不安全。不会替换所有换行符。 - Toskan
@Toskan 它不会删除哪些换行符? - geronimo
不会删除 "\r"(Mac)或 "\r\n"(Windows)。 - xbello

31

正如@john所提到的,最可靠的答案是:

string = "a\nb\rv"
new_string = " ".join(string.splitlines())

谢谢,这个是唯一一个能够真正移除自然换行的方法。例如:来自用户输入,而不仅仅是\n - static_null
我想对pandas数据框中的所有元素执行此操作。 - Keith
这个答案也是最简单易读的。它为代码增加的复杂性最少。 - CodeMed

7

由于我最近在从文件中读取文本时遇到相同的问题,所以现在回答晚了。我尝试了几个选项,例如:

with open('verdict.txt') as f: 

下面的第一种选项生成一个名为alist的列表,去除了'\n',然后重新连接成完整的文本(如果您只想要一个文本,则此步骤是可选的):
alist = f.read().splitlines()
jalist = " ".join(alist)

下面的第二个选项更简单,它生成了一个名为atext的文本字符串,将'\n'替换为空格;

atext = f.read().replace('\n',' ')

它可以运行;我已经完成了。这是干净、更容易和高效的。


4

strip()函数返回去除首尾空格后的字符串。请参阅文档

在您的情况下,您可能希望尝试使用replace()函数:

string2 = string1.replace('\n', '')

3
或者你可以尝试这个:
string1 = 'Hello \n World'
tmp = string1.split()
string2 = ' '.join(tmp)

1
这在许多情况下应该是可行的 -
text = ' '.join([line.strip() for line in text.strip().splitlines() if line.strip()])
text = re.sub('[\r\n]+', ' ', text)

-1

如果文件中的文本在中间包含换行符,则strip()rstrip()都无法解决问题,

strip系列函数用于修剪字符串的开头和结尾

replace()是解决问题的方法

>>> my_name = "Landon\nWO"
>>> print my_name
   Landon
   WO

>>> my_name = my_name.replace('\n','')
>>> print my_name
LandonWO

-1

strip() 返回一个去除前导和尾随空格(默认情况下)的字符串。

因此,它会将" Hello World "转换为"Hello World",但它不会删除\n字符,因为它存在于字符串之间。

尝试使用replace()

str = "Hello \n World"
str2 = str.replace('\n', '')
print str2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接