2

I want to extract all data between a repeating string

The text goes like this

map report for 0

...................
..............
lot of data in between
.....
......

map report for 1

My regex for this is

map = re.findall(r"map report for(.+?)\S*\W*map", filestring, re.S)

This only returns lines with even numbers after the search string( I presume the odd part is getting included in the preceding even iteration)

any workarounds?

4

3 回答 3

3

您应该考虑使用split而不是findall为此。它似乎更多的是你的想法:

re.split(r'map report for \d+\n', str)

这大大简化了你的情况。

于 2013-10-16T12:28:20.673 回答
2

您的正则表达式使用偶数匹配中的map单词。你需要前瞻:

map=re.findall(r"map report for(.+?)\S*\W*(?=map)",filestring,re.S)

这样,它会检查您的比赛是否遵循 my map,但不会被消耗

于 2013-10-16T12:21:38.087 回答
0

我将使用的正则表达式是这样的:

(map report for \d+)(.*?)\1

\1将保留您首先捕获的内容并尝试在最后再次匹配它,因此与其他方法不同,您可以map在两者之间使用字符串。

于 2013-10-16T12:29:10.670 回答