我有一个清单:
v = ['4/29/2016 8:25:58 AM', '5/25/2016 2:22:22 PM', 'True', 'Foo', 1, '4/20/1969 4:19:59 PM']
我希望遍历所有项目,使用/
将-
替换为re.sub
,如果不是字符串,则跳过该元素。我在这个列表理解中在语法上做错了什么,以便在运行x
之前检查re.sub
是否为字符串?
blah = [ re.sub("/", '-', x ) if isinstance(x, str) for x in v ]
错误输出:
blah = [ re.sub("/", '-', x ) if isinstance(x, str) for x in v ]
^
SyntaxError: invalid syntax
Process finished with exit code 1
答案 0 :(得分:1)
if
次迭代的for
子句应该在for
之后:
>>> blah = [re.sub("/", '-', x ) for x in v if isinstance(x, str)]
>>> blah
['4-29-2016 8:25:58 AM', '5-25-2016 2:22:22 PM', 'True', 'Foo', '4-20-1969 4:19:59 PM']
在您的情况下,由于它是一个简单的替换,您不需要使用re.sub()
。请改用str.replace()
:
>>> blah = [x.replace('/', '-') for x in v if isinstance(x, str)]
答案 1 :(得分:0)
您的if
和for
子句的顺序错误 - for
子句位于if
子句之前。尝试
blah = [ re.sub("/", '-', x ) for x in v if isinstance(x, str) ]
然后我选择blah
,
['4-29-2016 8:25:58 AM',
'5-25-2016 2:22:22 PM',
'True',
'Foo',
'4-20-1969 4:19:59 PM']