This doesn't look like a regular language), so it is impossible with unextended regexes, and likely also with common extensions. See this famous StackOverflow answer: stackoverflow.com/a/1732454/723090
As for what you might use instead, perhaps if you found the indices of all open and close tags (you can use regex for that), you can use a simple counter or stack to find the indices of top level blocks?
edit: Just saw you got the same link on SO. It's a similar problem to html because there are also nested strucetures, and regexes have no memory to remember the nesting level.
In some kind of pseudocode:
depth = 0
open_index = -1
for index, tag in find_all("{{", "}}"):
if tag == "{{":
if depth == 0:
open_index = index
depth += 1
else:
depth -= 1
assert depth >= 0: "unbalanced block"
if depth == 0:
yield "block from $open_index to $index"