我正在尝试将多行字符串转换为单个列表,这应该可以使用splitlines(),但由于某种原因,它会继续将每行转换为列表,而不是一次处理所有行。我试图从for循环中做到这一点,但似乎没有任何影响。我需要将这些行作为单个列表来使用另一个函数。下面是我如何将多线变为单个变量。我错过了什么?
multiline_string_final = []
for match_multiline in re.finditer(r'(^(\w+):\sThis particular string\s*|This particular string\s*)\{\s(\w+)\s\{(.*?)\}', string, re.DOTALL):
multi_line_string = match_multiline.group(4)
print multiline_string
最后一个print语句打印出如下字符串:
blah=0; blah_blah=1; Foo=3;
blah=4; blah_blah=5; Foo=0;
但是我需要:
['blah=0; blah_blah=1; Foo=3;''blah=4; blah_blah=5; Foo=0;']
我知道它必须与发现者有关,但似乎无法纠正。
答案 0 :(得分:1)
您的新问题也与finditer
无关。 (另外,您的代码仍然不是MCVE,您仍未向我们展示示例输入数据等,这使您更难以帮助您。)
从这个期望的输出:
['等等= 0; blah_blah = 1;富= 3; '' 等等= 4; blah_blah = 5;富= 0;']
我很确定你要找的是获得比赛列表,而不是自己打印出每场比赛。这不是一个有效的列表,因为它缺少元素之间的逗号,*但是我会假设你编造数据而不是构建MCVE并复制和粘贴实际输出是一个错字。
无论如何,要获得列表,您必须构建一个列表。将东西打印到屏幕上不会构建任何东西。所以,试试这个:
multiline_string_final.append(multiline_string)
然后,在结束时 - 不在循环内部,仅在循环结束后 - 你可以打印出来:
print multiline_string_final
它看起来像这样:
['blah=0; blah_blah=1; Foo=3;',
'blah=4; blah_blah=5; Foo=0;']
*实际上, 是一个有效的列表,因为相邻的字符串会被连接......但它不是你想要的字符串,而不是Python会为你打印的格式。子>
答案 1 :(得分:0)
问题与finditer
无关,就是你做错了事:
for line in multiline_string:
print multiline_string.splitlines()
如果multiline_string
确实是一个多行字符串,那么for line in multiline_string
将迭代该字符串的字符。
然后,在循环中,您完全忽略line
,而是print multiline_string.splitlines())
。
所以,如果multiline_string
是这样的话:
abc
def
然后你将连续8次打印['abc\n', 'def\n']
。这不是你想要的(或你所描述的)。
您想要做的是:
所以:
for line in multiline_string.splitlines():
print line