使用finditer python时striplines()不起作用

使用finditer python时striplines()不起作用,python,regex,string,multiline,Python,Regex,String,Multiline,我正在尝试将多行字符串转换为单个列表,这应该可以使用splitlines()实现,但由于某些原因,它会继续将每一行转换为一个列表,而不是一次处理所有行。我试图做它的循环外,但似乎没有任何效果。我需要将这些行作为一个列表来使用它的另一个功能。下面是如何将多行转换成单个变量的。我错过了什么 multiline_string_final = [] for match_multiline in re.finditer(r'(^(\w+):\sThis particular string\s*|This

我正在尝试将多行字符串转换为单个列表,这应该可以使用splitlines()实现,但由于某些原因,它会继续将每一行转换为一个列表,而不是一次处理所有行。我试图做它的循环外,但似乎没有任何效果。我需要将这些行作为一个列表来使用它的另一个功能。下面是如何将多行转换成单个变量的。我错过了什么

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;']

我知道这一定是因为finditer的原因,但似乎无法纠正

问题与
finditer
无关,而是您做了错误的事情:

for line in multiline_string:
    print multiline_string.splitlines()
如果
multiline\u string
确实是一个多行字符串,那么
for line in multiline\u string
将迭代该字符串的字符

然后,在循环中,您完全忽略
line
,而是
print multiline\u string.splitlines())

因此,如果
多行字符串
是:

abc
def
然后您将连续打印8次
['abc\n','def\n']
。这不是你想要的(或你描述的)

您要做的是:

  • 把绳子分成几行
  • 在这些行上循环,而不是在原始未拆分字符串上循环
  • 打印每一行,而不是全部内容
因此:

您的新问题也与
finditer
无关。(此外,您的代码仍然不是MCVE,您仍然没有向我们展示示例输入数据等,这使得帮助您变得更加困难。)

根据该期望输出:

[blah=0;blah_-blah=1;Foo=3;''blah=4;blah_-blah=5;Foo=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也不会为您打印格式。

当我这样做时,会得到相同的结果。只是为了确保,我应该在打印多行字符串后或在该字符串之外执行for循环??另外,我的多行字符串已经是“多行”了,那么为什么要将字符串拆分为多行呢?我的意思是它已经被分割成多行…@Doodle:splitlines
方法将一个多行字符串分割成一个单独的单行字符串列表。(还有,为什么要在代码中调用它?)您可能需要这样一个列表的原因是,您可以使用
for line in…
对它进行循环,就像您尝试做的那样。我调用它是为了让它在每一行中循环。还有,你建议的那个,只打印一行。不是列表中的所有行。我的输出是:abc就是这样。即使我把循环分开,我也只能打印第一行。嗨,我尝试了.append(行),它似乎给出了我想要的东西,但它会打印出它生成的每个值来给我结果。有什么不对吗??
['blah=0; blah_blah=1; Foo=3;',
 'blah=4; blah_blah=5; Foo=0;']