无法从字符串中删除换行符

时间:2016-10-16 02:20:43

标签: python

你能帮我解决这行python代码吗?我正在尝试向数组添加字符串,并排除换行符。虽然代码在第一次分割字符串时似乎工作,但它似乎认为那里有另一个新行,因为它返回错误消息:substring not found。但是,当我打印出cut的值时,它返回kdfjsalsdjf,显示新行代码已被删除

x='lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'

for i in x:
    if i=='\n':
        cut=x.index(i)
        x=x[cut+2:]


Traceback (most recent call last):
  File "<pyshell#5>", line 3, in <module>
    cut=x.index(i)
ValueError: substring not found

2 个答案:

答案 0 :(得分:3)

为什么不使用&#34;替换&#34;命令?

x.replace("\n","")

答案 1 :(得分:1)

您的问题源于这样一个事实:您迭代的x没有看到您所做的更改。

有点像这样:

x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
y = x
for i in x:
    if i=='\n':
        cut = y.index(i)
        y = y[cut+2:]

这是因为str.__iter__的工作方式,因此,您在for循环中对x所做的更改不会反映在for循环的未来迭代中。

您可以使用while循环修复此问题:

i = 0
while < len(x):
    if x[i] == '\n':
        x = x[i+2 :]
        i = -1
    i += 1

这有点令人费解,因为您似乎想要找到'\n'的最后一个匹配项,并在其后面取任何2个字符。所以你可以这样做:

x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
inds = []
for i,char in enumerate(x):
    if char=='\n':
        inds.append(i)
if not inds:  # '\n' was nowhere in the string
    x = x  # we don't have to make any changes
else:
    max_ind = max(inds)
    x = x[max_ind+2 :]

现在,让我们缩短一下:

x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
inds = [i for i,char in enumerate(x) if char=='\n']
max_ind = max(inds)+2 if inds else -2
x = x[max_ind :]

或者:

x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf'
try:
    max_ind = x.rindex('\n')
    x = x[max_ind+2 :]
except ValueError:
    pass