如何在列表中格式化此字符串 来自:
('1496\n8584\n172\n5988\n7184\n704\n3448\n6580\n8504\n', '')
到:
('1496','8584','172','5988','7184','704','3448','6580','8504')
我认为方法是使用re.sub(),但我在使用' \ n'不逃避
答案 0 :(得分:3)
您不需要re.sub
,str.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