我想检查字符串c中是否存在列表中存在的任何定界符。如果存在,则应基于定界符分割字符串,并应得到定界符的右部分。
我启动了一个EC2实例,并在下面的python代码下执行了它。
d=['[', ']', '(', ')', ',', '|', ' ']
c='csvfile|1234'
matching = [i for i in d if i in c]
if matching:
v=c.split(i)[1]
print(int(v))
else:
print 'doesn\'t exists'
预期结果:1234
实际结果:
$python main.py
Traceback (most recent call last):
File "main.py", line 5, in <module>
v=c.split(i)[1]
IndexError: list index out of range
答案 0 :(得分:0)
如果在第6行上定义了i
,则可能不等于'|'
。 i
仅在第3行的列表理解内有用定义。到第6行,您不应期望它具有有用的值。
答案 1 :(得分:0)
i在循环之外,因此当您尝试通过它索引时,它没有定义。
答案 2 :(得分:0)
为什么要检查上下文中不存在的i
? i
很好,但它指向字符串中的最后一个字符,而不是分隔符,您可以在分隔符上进行分割,而匹配是字符串中存在的分隔符列表。因此,假设只有一个定界符,那么在索引0上,我们就具有所需的定界符,您可以使用该定界符来分割字符串
d=['[', ']', '(', ')', ',', '|', ' ']
c='csvfile|1234'
matching = [i for i in d if i in c]
if matching:
v=c.split(matching[0])[1]
print(int(v))
else:
print 'doesn\'t exists'
答案 3 :(得分:0)
尝试一下:
d = ['[', ']', '(', ')', ',', '|', ' ']
c = 'csvfile|1234'
matching = [i for i in d if i in c]
if matching:
v = c.split(matching[0])[1]
print(int(v))
else:
print("doesn't exist")
输出:
1234
将i
替换为matching[0]
。这将获得matching
中的第一个元素,而不是i
中的第一个元素,甚至不应该在该范围中定义它。
此外,我不确定您是使用Python 2还是3,因为您同时使用了print
函数和语句。我将两个print
都更改为Python 3,因此如有需要,请改回
答案 4 :(得分:0)
尝试:
import re
d=['[', ']', '(', ')', ',', '|', ' ']
c='csvfile|1234'
re.split('|'.join(d), c)[-1]
输出:
'1234'
答案 5 :(得分:0)
在生成器上使用next
来查找第一个符号的索引并切成字符串:
d = ['[', ']', '(', ')', ',', '|', ' ']
c = 'csvfile|1234'
try:
indx = next(i for i, x in enumerate(c) if x in d)
print(c[indx+1:])
except StopIteration:
print("does not exist")
# 1234
这也处理多个分隔符的情况。例如:'csvfile|12,3[4'
仍为12,3[4
。
答案 6 :(得分:0)
尝试以下编写的代码可能会对您有所帮助:
gluOrtho2D