使用finditer python时,striplines()无法正常工作

时间:2014-08-08 01:05:02

标签: python regex string multiline

我正在尝试将多行字符串转换为单个列表,这应该可以使用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;']

我知道它必须与发现者有关,但似乎无法纠正。

2 个答案:

答案 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