使用re格式化Python列表

时间:2018-03-07 16:59:42

标签: python list

如何在列表中格式化此字符串 来自:

('1496\n8584\n172\n5988\n7184\n704\n3448\n6580\n8504\n', '')

到:

('1496','8584','172','5988','7184','704','3448','6580','8504')

我认为方法是使用re.sub(),但我在使用' \ n'不逃避

5 个答案:

答案 0 :(得分:3)

您不需要re.substr.split就足够了。

t = ('1496\n8584\n172\n5988\n7184\n704\n3448\n6580\n8504\n', '')

out = t[0].split()

# out : ['1496', '8584', '172', '5988', '7184', '704', '3448', '6580', '8504']

如果您希望完全采用您提供的格式,则可以转回tuple。请注意,当您使用(...)时,您正在创建一个tuple,而不是您提到的list

out = tuple(t[0].split())

# out : ('1496', '8584', '172', '5988', '7184', '704', '3448', '6580', '8504')

答案 1 :(得分:1)

希望这有效 -

a='1496\n8584\n172\n5988\n7184\n704\n3448\n6580\n8504\n'
b=a.split()
print(b)

输出 -

['1496', '8584', '172', '5988', '7184', '704', '3448', '6580', '8504']

a.split()会在每次出现\n时将字符串拆分。

答案 2 :(得分:0)

而不是re.sub,使用re.findall来抓取每一位数字:

import re
s = ('1496\n8584\n172\n5988\n7184\n704\n3448\n6580\n8504\n', '')
new_s = tuple(i for b in map(lambda x:re.findall('\d+', x), filter(None, s)) for i in b)

输出:

('1496', '8584', '172', '5988', '7184', '704', '3448', '6580', '8504')

答案 3 :(得分:0)

这很简单。对字符串使用split函数。

#!/usr/bin/python
s = ('1496\n8584\n172\n5988\n7184\n704\n3448\n6580\n8504\n', '')
output=s[0].split()
print(output)

输出您期望的列表:

['1496', '8584', '172', '5988', '7184', '704', '3448', '6580', '8504']

如果您想获得元组,请使用tuple函数进行转换。

#!/usr/bin/python
s = ('1496\n8584\n172\n5988\n7184\n704\n3448\n6580\n8504\n', '')
output=tuple(s[0].split())
print(output)

输出为元组:

('1496', '8584', '172', '5988', '7184', '704', '3448', '6580', '8504')

python中的元组和列表之间的差异可以得到here

答案 4 :(得分:0)

此代码解决了我的问题

output = ('1496\n8584\n172\n5988\n7184\n704\n3448\n6580\n8504\n', '')
output = str(output)
output = re.sub('[^a-zA-Z0-9 .]|n','',output)
output = output.split()
print output